我有一个关于 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有关该主题的更多讨论。
关于android - 我是否需要在每次操作数据时调用 getWritableDatabase(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18595482/