Android 正确关闭我的数据库
关闭数据库时无法创建数据库(请检查下面的代码)。如果我不关闭它,一切正常,但是我在logcat中得到了几个错误,说从未显式调用过Android 正确关闭我的数据库,android,sqlite,Android,Sqlite,关闭数据库时无法创建数据库(请检查下面的代码)。如果我不关闭它,一切正常,但是我在logcat中得到了几个错误,说从未显式调用过close()。如果我创建了数据库,然后添加了close(),这些错误就会消失,但我无法重新安装我的应用程序并运行它 private static class DbHelper extends SQLiteOpenHelper { public DbHelper(Context context) { super(context, DATABAS
close()
。如果我创建了数据库,然后添加了close()
,这些错误就会消失,但我无法重新安装我的应用程序并运行它
private static class DbHelper extends SQLiteOpenHelper {
public DbHelper(Context context) {
super(context, DATABASE_score, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID
+ " INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, " + KEY_SCORE1
+ " INTEGER TEXT NOT NULL, " + KEY_SCORE2
+ " INTEGER TEXT NOT NULL);");
db.close(); <---problem
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(db);
}
}
public Database(Context c) {
ourContext = c;
}
public Database open() throws SQLException {
ourHelper = new DbHelper(ourContext);
ourDatabase = ourHelper.getWritableDatabase();
return this;
}
public void close() {
ourHelper.close();
}
public long createEntry(String score, String score2) {
// TODO Auto-generated method stub
ContentValues cv = new ContentValues();
cv.put(KEY_SCORE1, score);
cv.put(KEY_SCORE2, score2);
return ourDatabase.insert(DATABASE_TABLE, null, cv);
}
私有静态类DbHelper扩展了SQLiteOpenHelper{
公共DbHelper(上下文){
super(上下文、数据库评分、null、数据库版本);
//TODO自动生成的构造函数存根
}
@凌驾
public void onCreate(SQLiteDatabase db){
//TODO自动生成的方法存根
db.execSQL(“创建表”+数据库表+”(“+KEY\u ROWID
+“整数主键自动递增唯一,”+键\u分数1
+“整数文本不为空,”+键2
+“整型文本不为NULL);”;
db.close();
试试这个;)调用super.close()
您不必在DbHelper类中的onCreate()
内部调用db.close();
相反,您必须使用
DbHelper\u instance.getReadableDatabase()
或DbHelper\u instance.getWritableDatabase()
并将其分配给对象(让我们将其定义为SQLiteDatabase数据库)
使用完数据库并关闭光标后,可以执行以下操作:
if (database.isOpen()) {
Log.d(TAG + " Closing SQLite Database connection...");
database.close();
}
您可以将其放在finally块中,以确保它将始终执行(请记住,您的DB操作在try/catch中).发布logcat输出,至少前10-15行。由于某些原因,我无法实现您的解决方案;/如果您有直接的问题,我可以帮助您,或者发布完整的源代码。遗憾的是,我做到了,但有一个非常聪明的人编辑了我的帖子!!!!我在您的帖子中看到了逻辑,并将尝试实现它…嗯,无法实现它崩溃….private Context Context;private SQLiteDatabase db;private Database dbHelper;public dbHelper(Context Context){super(Context,Database_score,null,Database_VERSION);//TODO自动生成的构造函数存根this.Context=Context;this.db=dbHelper.getWritableDatabase();}public void close(){dbHelper.close();}
if(myDataBase != null)
myDataBase.close();
super.close();
if (database.isOpen()) {
Log.d(TAG + " Closing SQLite Database connection...");
database.close();
}