zoukankan      html  css  js  c++  java
  • android之SQLite数据库应用(一)

    先上一个小程序,具体的解析介绍会在以后的文章中详细说明,已经凌晨0:40了,我实在是困了,只能把这活移到明天了。今天先把代码粘贴上。

    效果图:(向数据库中存入数据,然后再把数据读出来)

    main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:id="@+id/textView"
        />
    </LinearLayout>

    activity的代码

    package cn.com.SQLite;
    
    import java.util.ArrayList;
    
    import android.app.Activity;
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.TextView;
    
    /**
     * 
     * @author chenzheng_java
     * @description SQLite数据库在android中的应用
     * @since 2011/03/05
     * 
     */
    public class SQLiteActivity extends Activity {
        private String result = "结果:/n";
        private String tableName = "chenzheng_Java";
        public static final int version_1 = 1;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            run();
            TextView textView = (TextView) findViewById(R.id.textView);
            textView.setText(result);
        }
    
        /**
         *@description 对数据进行增删改查
         */
        private void run() {
            clear();
            save();
            read();
        }
    
        /**
         * 从数据表中读出记录
         */
        private void read() {
            MySqliteOpenHandler handler = new MySqliteOpenHandler(this, tableName,
                    null, version_1);
            SQLiteDatabase database = handler.getWritableDatabase();
            Cursor cursor = database.query(tableName, null, null, null, null, null,
                    null);
            int count = cursor.getCount();
            Log.i("通知", "总记录数" + count);
    
            int index = cursor.getColumnIndex("name");
            Log.i("通知", "nameIndex" + index);
            int indexOfAge = cursor.getColumnIndex("age");
    
            cursor.moveToFirst();
            while (!cursor.isAfterLast()) {
                Log.i("通知", "here");
                String name = cursor.getString(index);
                result += "/n 姓名:" + name;
                int age = cursor.getInt(indexOfAge);
                result += " 年龄:" + age;
                cursor.moveToNext();
            }
            database.close();
        }
    
        /**
         * 保存一些数据到表中
         */
        private void save() {
            ArrayList<Beauty> beautyList = getData();
            MySqliteOpenHandler handler = new MySqliteOpenHandler(
                    SQLiteActivity.this, tableName, null, version_1);
            SQLiteDatabase database = handler.getWritableDatabase();
            for (Beauty beauty : beautyList) {
                // 开始事物
                database.beginTransaction();
                // 以键值对形式存储列名和值的对象
                ContentValues contentValues = new ContentValues();
                contentValues.put("name", beauty.getName());
                contentValues.put("age", beauty.getAge());
                long flag = database.insertOrThrow(tableName, "age", contentValues);
                Log.i("通知", beauty.toString());
                if (flag == -1) {
                    Log.i("通知", "insert操作失败");
                } else {
                    database.setTransactionSuccessful();
                }
                // 结束事物
                database.endTransaction();
            }
    
            database.close();
    
        }
    
        /**
         * 清除表中原有的记录
         */
        private void clear() {
            MySqliteOpenHandler handler = new MySqliteOpenHandler(
                    SQLiteActivity.this, tableName, null, version_1);
            SQLiteDatabase database = handler.getWritableDatabase();
            database.delete(tableName, null, null);
            database.close();
    
        }
    
        /**
         * 
         * @return 初始化数据
         */
        private ArrayList<Beauty> getData() {
            ArrayList<Beauty> beautyList = new ArrayList<Beauty>();
            Beauty beauty = null;
    
            beauty = new Beauty("小医仙", 23);
            beautyList.add(beauty);
    
            beauty = new Beauty("萧薰儿", 21);
            beautyList.add(beauty);
    
            beauty = new Beauty("杜梅莎女王", 24);
            beautyList.add(beauty);
    
            return beautyList;
    
        }
    
        /**
         * @author chenzheng_java
         * @description 实现我们自己的sqlite的创建及更新帮助类
         * @since 2011/03/05
         */
        private class MySqliteOpenHandler extends SQLiteOpenHelper {
    
            public MySqliteOpenHandler(Context context, String name,
                    CursorFactory factory, int version) {
                super(context, name, factory, version);
                Log.i("通知", "MySqliteOpenHandler实例化完毕");
            }
    
            /**
             * onCreate方法在系统中不存在用户查询的表时执行,我们在这里可以实现该方法并做一些额外的操作
             */
            @Override
            public void onCreate(SQLiteDatabase db) {
                db.execSQL("drop table  if  exists " + tableName);
                db
                        .execSQL("create table if not exists '"
                                + tableName
                                + "' (id INTEGER primary key,name varchar(20),age INTEGER)");
    
                Log.i("通知", "创建表成功!");
            }
    
            /**
             * onUpgrade方法在系统中应用版本发生改变的时候执行
             */
            @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                Log.i("通知", "版本升级成功!");
    
            }
    
        }
    
        /**
         * 
         * @author chenzheng_Java
         * @description 美人实体类
         */
        private class Beauty {
            String name;
            int age;
    
            public Beauty() {
            }
    
            public Beauty(String name, int age) {
                this.name = name;
                this.age = age;
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            public int getAge() {
                return age;
            }
    
            public void setAge(int age) {
                this.age = age;
            }
    
            @Override
            public String toString() {
                return "Beauty [age=" + age + ", name=" + name + "]";
            }
    
        }
    
    }

    其他都为默认。运行,便可得到如上结果。

    ------------------------------------------------------------------------

    这里请注意一点,MySqliteOpenHandler该类的构造方法中,第二个参数,实际上代表的是数据库的名字,而并非表名称,这里直接使用了表名进行构建,是为了让代码看的稍微少些,也满足下笔者偷懒的欲望,呵呵。切记 切记

  • 相关阅读:
    docker 镜像管理
    docker 常用操作
    docker 简单介绍与安装
    emacs 缩进
    stl标准库 iterator_traits
    emacs semantic,speedbar,gdb汇总
    在emacs 里使用gdb
    emacs speedbar功能介绍
    前端基础之BOM和DOM
    modules模块
  • 原文地址:https://www.cnblogs.com/a354823200/p/4008423.html
Copyright © 2011-2022 走看看