我在android中有一个关于sqlite数据库的新手问题:
每次操作数据时,我是否真的需要检索可写数据库?
所以我可以像这样写一个DAO:
class Dao {
private final SQLiteDatabase database;
public Dao(SQLiteOpenHelper databaseHelper){
database = databaseHelper.getWritableDatabase();
}
public void insert(...){
ContentValues cv = new ContentValues(4);
database.insertOrThrow(TABLE, null, cv);
...
}
public void update(...){
ContentValues cv = new ContentValues(4);
database.update(....);
}
}
或者我必须像这样写我的道:
class Dao {
private final SQLiteOpenHelper databaseHelper;
public Dao(SQLiteOpenHelper databaseHelper){
this.databaseHelper = databaseHelper
}
public void insert(...){
SQLiteDatabase database = databaseHelper.getWritableDatabase();
ContentValues cv = new ContentValues(4);
database.insertOrThrow(TABLE, null, cv);
...
}
public void update(...){
SQLiteDatabase database = databaseHelper.getWritableDatabase();
ContentValues cv = new ContentValues(4);
database.update(....);
}
}
如果第二种方法是正确的: 每次操作后我还需要关闭数据库:
public void update(...){
SQLiteDatabase database = databaseHelper.getWritableDatabase();
ContentValues cv = new ContentValues(4);
database.update(....);
database.close();
}
对于databaseHelper.getReadableDatabase()
,我猜它是一样的吗?
答案 0 :(得分:9)
您应该关闭所打开的每个光标。但是每次使用后都不需要关闭数据库实例。
我通常在onCreate()
中获取可写数据库,并将生成的SQLiteDatabase
存储为每个活动的成员变量,并且永远不会显式关闭该实例。 (但是,一旦我完成处理结果,我就会关闭每个光标。)
有关此主题的更多讨论,请参阅Managing SQLite Connections in Android。