Android 正确关闭我的数据库

Android 正确关闭我的数据库,android,sqlite,Android,Sqlite,关闭数据库时无法创建数据库(请检查下面的代码)。如果我不关闭它,一切正常,但是我在logcat中得到了几个错误,说从未显式调用过close()。如果我创建了数据库,然后添加了close(),这些错误就会消失,但我无法重新安装我的应用程序并运行它 private static class DbHelper extends SQLiteOpenHelper { public DbHelper(Context context) { super(context, DATABAS

关闭数据库时无法创建数据库(请检查下面的代码)。如果我不关闭它,一切正常,但是我在logcat中得到了几个错误,说从未显式调用过
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();
        }