0

在我的代码中,我有如下两个数据库更新。我的大多数更新在更新记录之前首先打开数据库,然后在更新记录后关闭数据库。我注意到不使用此语句: mDb = Helper.getWritableDatabase(); 在插入和此语句之前: mDb.close(); 插入后,有时会导致强制关闭错误,但并非总是如此。什么是正确的方法。我是一直使用 open 和 close 语句,还是仅在必须或应该在更新过程中始终打开然后关闭时使用。什么是正确的技术。这是带有打开关闭语句的片段。提前致谢。公开声明是否必要?

            // Open connections to the database
            mDb = Helper.getWritableDatabase();             

            // update 1
            String strFilter7 = "_id=" + 7;
            ContentValues args7 = new ContentValues();
            args7.put(COL_VALUE, newB1ftgvalue);
            mDb.update("VarData", args7, strFilter7, null);

             // update 2
            String strFilter11 = "_id=" + 11;
            ContentValues args11 = new ContentValues();
            args11.put(COL_VALUE, newB2ftgvalue);
            mDb.update("VarData", args11, strFilter11, null);

            // closes database
            mDb.close();    
4

3 回答 3

2

不要关闭它,并且只有一个 sqlite 助手。它基本上是一个静态的openhelper。从不关闭数据库没有问题。该链接提供了一段很好的代码,效果很好。使用打开的数据库不会出现内存泄漏。但是,您将遇到打开游标的问题,因此请确保关闭它们。

http://www.touchlab.co/blog/single-sqlite-connection/

这里有一个很好的讨论: Android 上 SQLite 的最佳实践是什么?

我意识到我发布的链接自从我第一次查看它时就发生了变化。改变:

instance = new DatabaseHelper(context);

instance = new DatabaseHelper(context.getApplicationContext());

public class DatabaseHelper extends OrmLiteSqliteOpenHelper

public class DatabaseHelper extends SqliteOpenHelper
于 2012-04-18T22:06:44.960 回答
2

完成数据库更新后始终调用 close() 是一种很好的做法。如果您尚未关闭数据库,您可能会看到错误。数据库打开后,您可以进行多次更新。这不应该是一个问题。需要注意的一件事是,由于很多原因,最好不要长时间保持打开连接。这是关于这个主题的很好的讨论。

于 2012-04-18T21:51:28.930 回答
1

您需要将数据库作为可写数据库打开才能修改其数据,所以是的,您必须在更新记录之前打开它。

于 2012-04-18T22:22:36.200 回答