gpt4 book ai didi

android - 如何在 Android 中正确打开/关闭 SQLite 数据库

转载 作者:IT王子 更新时间:2023-10-29 06:20:46 24 4
gpt4 key购买 nike

我有一个应用程序可以正常运行并且不会强制关闭或崩溃。但是当我查看 LogCat 时,它偶尔会给我这样的信息:

05-20 15:24:55.338: E/SQLiteDatabase(12707): close() was never explicitly called on database '/data/data/com.---.--/databases/debt.db' 
05-20 15:24:55.338: E/SQLiteDatabase(12707): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here

往下一点点...

05-20 15:24:55.338: E/System(12707): Uncaught exception thrown by finalizer
05-20 15:24:55.338: E/System(12707): java.lang.IllegalStateException: Don't have database lock!

我不确定应该何时打开和关闭我的数据库?

我有一个主要 Activity ,它只是一个启动画面。然后它进入一个使用数据库中的信息调用 ListView 的 Activity ;所以它是在 this Activity 中首次打开数据库的地方。

还有一个需要 DB 的其他 Activity ,它从带有 ListVeew 的 Activity 中分支出来。我应该什么时候打开和关闭它?据说我只需要打开一次,然后在应用程序“暂停”、“停止”或“销毁”时关闭。

如果是这种情况,我应该将 db.close() 方法...放在 onStop 等所在的初始屏幕主 Activity 中的什么位置?或与打开数据库的 Activity 相同的 Activity ?或者..还有别的地方吗?

更新:

这是错误一直指向的代码行:

public void open() throws SQLException {
database = dbHelper.getWritableDatabase();
}

最佳答案

如果您正在使用 DatabaseHelper 类的实例,并且在初始化 DBHelper 对象之后,每次您在数据库中工作时,您应该在工作之前调用 open 方法,然后创建一个新的游标,查询数据库,处理您刚刚存储在游标中的信息,完成后关闭游标,然后关闭数据库。例如,如果你想抓取数据库中的每个项目,你可以这样做:

...    
DataBaseHelper db = new DataBaseHelper(this);
...
db.open();
Cursor cursor = db.getAllItems();
maxCount = cursor.getCount();
Random gen = new Random();
row = gen.nextInt(maxCount); // Generate random between 0 and max
if (cursor.moveToPosition(row)) {
String myString = cursor.getString(1); //here I want the second column
displayString(myString); //private method
}
cursor.close();
db.close();

getAllItems 是我的 DatabaseHelper 中的一个公共(public)方法,如果您想知道的话,它看起来像这样

public Cursor getAllItems() {
return db.query(DATABASE_TABLE,
new String[] {
KEY_ROWID,
KEY_NAME
},
null,
null,
null,
null,
null);
}

这就是我访问我的数据库的方式,我没有得到任何你遇到的错误,而且它工作得很好。

关于android - 如何在 Android 中正确打开/关闭 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10677781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com