andorid(3) 使用sqllite进行数据持久化

1.概览

1.sqlite依赖于继承SQLiteOpenHelper类,对onCreate()和onUpgrade()的重写,onCreate()会在检测到在数据库未创建的时候才调用去该接口创建, SQLiteOpenHelper构造时需传入一个int version变量,该变量改变的时候就会调用onUpgrade()进行重新升级.

2.正文

2.1 sqlite的创建和初始化

public class DBHelper extends SQLiteOpenHelper {
    Context mcontext;
    private static String createTaskName="create table task_name(" +
            "id integer primary key autoincrement," +
            "name varchar(16))";


    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        this.mcontext=context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(createTaskName);
        Toast.makeText(mcontext,"task_name数据库已更新",Toast.LENGTH_SHORT).show();
        Log.i("info:", "task_name数据库已创建");
     
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists task_name");
        onCreate(db);
        Log.i("info:", "task_time_info数据库已创建");
        Toast.makeText(mcontext,"数据库已更新",Toast.LENGTH_SHORT).show();
    }
}

可见上文,创建了一个task_name的表, 在类DBHelper的构造函数中可以看到传入了一个version, 这是用来做当前数据库版本管理的,onCreate()会在检测到在数据库未创建的时候才调用去该接口创建, SQLiteOpenHelper构造时需传入一个int version变量,该变量改变的时候就会调用onUpgrade()进行重新升级.,该变量改变的时候就会调用onUpgrade()进行删表重新创建

2.2 sqlite的CURD的使用

上面介绍完了数据库的创建与更新,下面的例子演示如何实际使用

public class DBOperatorHelper {
    public String dbName = "TimeMaster.db";
    public int dbVersion = 5;

    public DBHelper dbHelper;
    public SQLiteDatabase db;

    DBOperatorHelper(Context context){
        dbHelper = new DBHelper(context, dbName, null, dbVersion);
        db = dbHelper.getWritableDatabase();
    }

    void deleteTaskName(){
           db.delete("task_name", "id=? and name=?", new String[]{"1", "study"});
    }

    void showAllTaskName(){
        Cursor cursor = db.query("task_name", null, "name = ?", new String[]{task_name},
                    null, null, null, null);
        for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
            Sting name =  cursor.getString(cursor.getColumnIndex("name"))
            Log.i("info:", "name is "+ name);
        }
    }
    
    void insertTaskName(){
        ContentValues values = new ContentValues();
        values.put("name", "study");
        db.insert("task_name", null, values);

    }

    void updateTaskName(){
        ContentValues values = new ContentValues();
        values.put("name", "play");
        db.update("task_name", values, "id != ? and name =?", new String[]{"1", "study"});
    }

此处创建了一个TimeMaster.db的数据库,version设置为5 ;

所有的数据库操作都依赖于SQLiteDatabase db对象,insert和updata都依赖于一个ContentValues 类型的对象,其是用来构建键值对去做update或者insert的,而select依赖于一个Cursor对象,其返回了查询的所有内容,能通过getColumnIndex("name")获取name所在的列的index, 然后通过getString或者getInt等各种方法去读取该列的值

posted @ 2020-05-04 19:39  woder  阅读(167)  评论(0编辑  收藏  举报