-----------2016年10月14日22:10:07
Android中数据库的使用:
1.创建一个类,继承SQLiteOpenHelper,实现该类的构造方法
public XXX(Context context, String name, CursorFactory factory, int version)
-->该构造方法可以只设置一个参数Context context,其余参数可在surper中确定
public XXX(Context context, String name, CursorFactory factory, int version){
surper(context,name,factory,version);
}
-->改进之后
public XXXX(Context context){
surper(context,"xxx.db",null,1);
}
-->构造方法中参数的含义
context---上下文
name---数据库名称
factory---游标对象,默认为空
version---版本,从1开始的递增整数
2.创建好了类之后,重写onCreate()和onUpgrade()方法
-->onCreate()方法,在数据库第一次创建时调用,该方法主要用于表结构的创建。
所以,所有建表的sql语句,都在改方法中执行.
db.execSQL("sql");
-->onUpgrade()方法,数据库版本号改变/修改表结构(增/删一个字段)调用
3.实例化XXX类,调用静态方法getReadableDatabase/getWritableDatabase,得到SQLiteDatabase对象
XXX xx = new XXX(context);
SQLiteDatabase db = xx.getReadableDatabase();
☆☆☆操作完db及时关闭数据库,减少内存消耗
db.close();
4.进行增删改查操作
-->增加
long result = db.insert(String table, String nullColumnHack, ContentValues values);
table:表名
nullColumnHack:默认为null,为null时表示插入一个空行
values:添加那条数据的值,底层由HashMap实现,values.put(key,value)实现数据的添加
result:返回添加成功后那一行的ID,-1添加失败
-->删除
int result = db.delete(String table, String whereClause, String[] whereArgs);
whereArgs:判断条件,如"name=?"
whereClause:判断条件的占位符,String[]类型 new String[]{"小王"}
result:删除的行数
-->更新
类似删除,多一个value
update(String table, ContentValues values, String whereClause, String[] whereArgs)
value:存放要更新的信息
-->查询(Cursor游标对象)
Cursor cursor = db.rawQuery(sql语句,查询条件)
返回cursor结果集
cursor.getCount()获取结果集的行数
cursor.moveToNext()判断是否有下一行内容,有返回true,无返回false;
☆☆☆cursor使用完后需要关闭,cursor.close();
5.优化
避免每次操作数据库,都实例化一个XXX类,创建数据库的过程放在dao的构造函数中,
☆☆☆☆其中,获取SQLiteDatabase对象的方法不能放在构造函数中。因为,在构造函数中
只获取了一个SQLiteDatabase对象,而每次对数据进行不同的操作后都关闭了数据库,在以
后的操作中,就无法获得SQLiteDatabase对象,从而导致对数据操作失败!
Android中数据库的使用:
1.创建一个类,继承SQLiteOpenHelper,实现该类的构造方法
public XXX(Context context, String name, CursorFactory factory, int version)
-->该构造方法可以只设置一个参数Context context,其余参数可在surper中确定
public XXX(Context context, String name, CursorFactory factory, int version){
surper(context,name,factory,version);
}
-->改进之后
public XXXX(Context context){
surper(context,"xxx.db",null,1);
}
-->构造方法中参数的含义
context---上下文
name---数据库名称
factory---游标对象,默认为空
version---版本,从1开始的递增整数
2.创建好了类之后,重写onCreate()和onUpgrade()方法
-->onCreate()方法,在数据库第一次创建时调用,该方法主要用于表结构的创建。
所以,所有建表的sql语句,都在改方法中执行.
db.execSQL("sql");
-->onUpgrade()方法,数据库版本号改变/修改表结构(增/删一个字段)调用
3.实例化XXX类,调用静态方法getReadableDatabase/getWritableDatabase,得到SQLiteDatabase对象
XXX xx = new XXX(context);
SQLiteDatabase db = xx.getReadableDatabase();
☆☆☆操作完db及时关闭数据库,减少内存消耗
db.close();
4.进行增删改查操作
-->增加
long result = db.insert(String table, String nullColumnHack, ContentValues values);
table:表名
nullColumnHack:默认为null,为null时表示插入一个空行
values:添加那条数据的值,底层由HashMap实现,values.put(key,value)实现数据的添加
result:返回添加成功后那一行的ID,-1添加失败
-->删除
int result = db.delete(String table, String whereClause, String[] whereArgs);
whereArgs:判断条件,如"name=?"
whereClause:判断条件的占位符,String[]类型 new String[]{"小王"}
result:删除的行数
-->更新
类似删除,多一个value
update(String table, ContentValues values, String whereClause, String[] whereArgs)
value:存放要更新的信息
-->查询(Cursor游标对象)
Cursor cursor = db.rawQuery(sql语句,查询条件)
返回cursor结果集
cursor.getCount()获取结果集的行数
cursor.moveToNext()判断是否有下一行内容,有返回true,无返回false;
☆☆☆cursor使用完后需要关闭,cursor.close();
5.优化
避免每次操作数据库,都实例化一个XXX类,创建数据库的过程放在dao的构造函数中,
☆☆☆☆其中,获取SQLiteDatabase对象的方法不能放在构造函数中。因为,在构造函数中
只获取了一个SQLiteDatabase对象,而每次对数据进行不同的操作后都关闭了数据库,在以
后的操作中,就无法获得SQLiteDatabase对象,从而导致对数据操作失败!