Android数据存储操作③SQLite基本操作
一、SQLiteOpenHelper:
这个类主要生成一个数据库,并对数据库的版本进行管理。当在程序当中调用这个类的方法getWritableDatabase(),或者getReadableDatabase()方法的时候,如果当时没有数据,那么Android 系统就会自动生成一个数据库。SQLiteOpenHelper 是一个抽象类,我们通常需要继承它,并且实现里边的3 个函数,具体函数如下所示。
• onCreate(SQLiteDatabase):在数据库第一次生成的时候会调用这个方法,一般我们在这个方法里边生成数据库表。
• onUpgrade(SQLiteDatabase, int, int) :当数据库需要升级的时候,Android 系统会主动的调用这个方法。一般我们在这个方法里边删除数据表,并建立新的数据表,当然是否还需要做其他的操作,完全取决于应用的需求。
• onOpen(SQLiteDatabase):这是当打开数据库时的回调函数,一般也不会用到。
具体实例如下:
2 DatabaseHelper(Context context) {
3 super(context, DATABASE_NAME, null, DATABASE_VERSION);
4 }
5 @Override
6 public void onCreate(SQLiteDatabase db) {
7 // sql 语句
8 String sql = "CREATE TABLE " + TABLE_NAME + " (" + TITLE
9 + " text not null, " + BODY + " text not null " + ");";
10 Log.i("haiyang:createDB=", sql);
11 //执行这条sql 语句
12 db.execSQL(sql);
13 }
14 @Override
15 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
16 }
17 }
二、数据库操作
1、得到数据库对象,方法有2个,第一种是用SQLiteOpenHelper对象的getReadableDatabase()、getWritableDatabase()方法。
第二种是采用openOrCreateDatabase()方法,示例代码如下:
2 db.execSQL(CREATE_SQL);
注意,执行SQL语句的代码最好放在try catch语句中,增强程序的健壮性!
2、查询(query):
query()方法各个参数的含义:
①Boolean类型,可选参数,指定返回值是否唯一(官方API解释为true if you want each row to be unique, false otherwise.)
②string类型,表的名称
③string数组,列出所需查询的列的信息
④string类型,selection,相当于sql 语句的where 部分,用于过滤需要查询列的信息,可以包含占位符“?”,如果想返回所有的数据,那么就直接置为null
⑤string数组,selectionArgs。在selection 部分,你有可能用到"?",那么在selectionArgs 定义的字符串会代替selection 中的"?",用于替换where子句中的"?"数组。
⑥string类型,参数为groupBy。定义查询出来的数据是否分组,如果为null 则说明不用分组。
⑦string类型,参数为groupBy。定义查询出来的数据是否分组,如果为null 则说明不用分组
⑧string类型,参数为orderBy,来描述我们期望的返回值是否需要排序,如果设置为null 则说明不需要排序
⑨string类型,可选参数,定义对返回行行数的限制。
3、cursor和ContentValues
cursor又叫游标,相当于对底层数据中结果集的指针。ContentValues和Hashtable 比较类似,它也是负责存储一些名值对,但是它存储的名值对当中的名是一个String 类型,
而值都是基本类型。
4、delete:
第三课参数含义:如果在第二个参数当中有"?"符号,那么第三个参数中的字符串会依次替换在第二个参数当中出现的?符号。
删除表的操作:
2 db.execSQL(sql);
5、update
2 cv.put(COLUMN_NAME,value);// if not update a record,repeat this.
3 string where = KEY_ID+"="+row_Id;
4 db.update(Table_name,cv,where,null);
6、Insert
2 cv.put(COLUMN_NAME,value,null);
3 db.insert(Table_name,null,cv);
注:在ListView中的数据更新后可以使用renderListView()进行刷新!