我对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()
一样吗? 最佳答案
您应该关闭打开的每个游标。但是,每次使用后都无需关闭数据库实例。
我通常在onCreate()
中获取一个可写数据库,并将所得的SQLiteDatabase
存储为每个 Activity 的成员变量,并且从不明确关闭该实例。 (但同样,一旦处理完结果,我就关闭所有游标。)
有关此主题的更多讨论,请参见Managing SQLite Connections in Android。