gpt4 book ai didi

java - SQLiteOpenHelper 和关闭方法

转载 作者:行者123 更新时间:2023-11-30 11:32:33 27 4
gpt4 key购买 nike

我正在做一些测试,每次我调用 SQLiteOpenHelper.close()然后我尝试重新打开数据库,例如 SQLiteOpenHelper.getWritableDatabase()我得到异常 java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase

有什么方法可以重新打开数据库吗?或者我应该重新创建 SQLiteOpenHelper 对象?

这是代码,它在第二次调用方法 getNoteCount 时崩溃

public DBController(Context ctx) {
this.mContext = ctx.getApplicationContext();
mDbHelper = new OpenHelper(mContext);
}

public int getNoteCount(){
SQLiteDatabase mDb =mDbHelper.getWritableDatabase();
Cursor c= mDb.query("notes", null, null, null, null, null, null);
int result=c.getCount();
c.close();
mDb.close();
return result;
}



private static class OpenHelper extends SQLiteOpenHelper {

DatabaseHelper(Context ctx) {
super(ctx, DB_NAME, null, DB_VERSION);

}
............
}

我正在考虑做这样的事情:

public abstract class DBHelper {

private SQLiteOpenHelper openHelper;
private int openCount = 0;

protected abstract SQLiteOpenHelper newSQLiteOpenHelper();

public void openDatabase() {
open();
}

public void closeDatabase() {
close();
}

protected synchronized SQLiteDatabase open() {
if (openHelper == null) {
openHelper = newSQLiteOpenHelper();
}
openCount++;
return openHelper.getWritableDatabase();
}

protected synchronized void close() {
openCount--;
if (openCount == 0) {
openHelper.close();
openHelper = null;
}

}

}

然后这样使用

public class DBController extends DBHelper{
public DBController(Context ctx) {
this.mContext = ctx.getApplicationContext();
}

@Override
protected SQLiteOpenHelper newSQLiteOpenHelper() {
return new OpenHelper(mContext);
}

public int getNoteCount(){
SQLiteDatabase mDb =open();
Cursor c= mDb.query("notes", null, null, null, null, null, null);
int result=c.getCount();
c.close();
close();
return result;
}
}

最佳答案

据我所知,在应用程序被销毁之前,您不应该关闭数据库。参见 Android error - close() was never explicitly called on database

关于java - SQLiteOpenHelper 和关闭方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16615431/

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