每次使用后打开和关闭sqlite数据库

时间:2014-03-19 11:39:48

标签: android sqlite android-sqlite

为每个数据库事务操作打开和关闭数据库是一个好习惯吗?让我更清楚你。

我有两种方法,比如

public SQLiteDatabase getDatabase() {
    if (database == null || !database.isOpen()) {
        database = getWritableDatabase();
    }
    return database;
}

public void closeDatabase() {
    if (database != null && database.isOpen()) {
        database.close();
    }
}

所以每当我更新/插入或删除时,我都会打开数据库并关闭它。

 public void insert(...) {
      getDatabase().insert(...);
      closeDatabase();
 }

 public void update(...) {
      getDatabase().update(...);
      closeDatabase();
 }

 public void delete(...) {
      getDatabase().delete(...);
      closeDatabase();
 }

请记住,所有这些方法都在DatabaseHelper类中,该类正在扩展SQLiteOpenHelper并且存在一个全局变量private SQLiteDatabase database

我将更频繁地执行这些操作(插入/更新/删除)。

所以我的问题是Is it a good practice to open and close database for every transaction? if not, what is the good way? Where and When I have to close my database?

1 个答案:

答案 0 :(得分:2)

每次打开和关闭数据库都可能(非故意)遇到问题,例如Trying to open an already closed database

因此,我建议使用Singleton来创建数据库对象,这样每次调用database = getWritableDatabase();时都会引用相同的对象。

考虑在onDestroy()方法中关闭它,以便在应用程序关闭数据库时也关闭它。

private static AllItemsDB db; //AllItemsDB is my database class
public static AllItemsDB getDb() {

    if (db == null) {
        Log.d("","Issue here");
        db = new AllItemsDB(app);
        Log.d("","Issue here not");
    }

    return db;
}

因为这是一个静态方法,我可以做AllItemsDB.myCRUD_methods,它每次都会返回相同的oblect并且也很容易访问。 :)

Help.