在我的代码中,我有以下两个数据库更新。我的大多数更新在更新记录之前首先打开数据库,然后在更新记录后关闭数据库。我注意到没有使用这个语句: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();
答案 0 :(得分:2)
最好在完成数据库更新后始终调用close()。如果您尚未关闭数据库,则可能会看到错误。数据库打开后,您可以执行多个更新。这应该不是问题。需要注意的一件事是,最好不要因为很多原因长时间保持开放连接。关于这个主题,这里很好discussion 。
答案 1 :(得分:2)
不要关闭它,只有一个sqlite帮助器。它基本上是一个静态的openhelper。从不关闭数据库没有问题。这个链接提供了一个很好的代码。打开数据库不会出现内存泄漏。但是你会遇到打开游标的问题,所以一定要关闭它们。
http://www.touchlab.co/blog/single-sqlite-connection/
这里有一个很好的讨论: What are the best practices for SQLite on Android?
我意识到我发布的链接自从我第一次看到它以来就发生了变化。变化:
instance = new DatabaseHelper(context);
到
instance = new DatabaseHelper(context.getApplicationContext());
和
public class DatabaseHelper extends OrmLiteSqliteOpenHelper
到
public class DatabaseHelper extends SqliteOpenHelper
答案 2 :(得分:1)
您需要打开数据库作为可写数据库才能修改其数据,所以是的,您必须在更新记录之前打开它。