正确关闭我的数据库

时间:2011-12-15 10:01:41

标签: android sqlite

我关闭它时无法创建数据库(请查看下面的代码)。如果我不关闭它一切正常但我在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);
}

所以问题是:如何调用db.close()并正确运行我的应用程序?

3 个答案:

答案 0 :(得分:2)

您不必在DbHelper课程的db.close();内拨打onCreate()

相反,您必须使用DbHelper类从中获取数据库实例 DbHelper_instance.getReadableDatabase()DbHelper_instance.getWritableDatabase()并将其分配给SQLiteDatabase对象(让我们将其定义为SQLiteDatabase数据库)。

使用完数据库后,关闭光标,可以执行以下操作:

        if (database.isOpen()) {
            Log.d(TAG + " Closing SQLite Database connection...");
            database.close();
        }

您可以将它放在finally块中,以确保它始终执行(请记住您的数据库操作在try / catch中包围)。

答案 1 :(得分:0)

private Context context;
private SQLiteDatabase db;

public DataBase(Context context) {
    this.context = context;
    OpenHelper openHelper = new OpenHelper(this.context);
    this.db = openHelper.getWritableDatabase();
}

public void closeData() {
    this.db.close();
}

试试这个;)

答案 2 :(得分:0)

调用super.close();

 if(myDataBase != null)
        myDataBase.close();

       super.close();