закрытие моей базы данных правильно - PullRequest
1 голос
/ 15 декабря 2011

Я не могу создать свою базу данных, когда закрываю ее (проверьте код ниже). Если я не закрываю его, все работает нормально, но я получаю несколько ошибок в 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 ]

2 голосов
/ 15 декабря 2011

Вам не нужно звонить db.close(); внутри вашего onCreate() в вашем классе DbHelper.

Вместо этого вам нужно получить экземпляр базы данных из вашего класса DbHelper, используя DbHelper_instance.getReadableDatabase() или DbHelper_instance.getWritableDatabase() и присвоить его объекту SQLiteDatabase (давайте определим его как базу данных SQLiteDatabase).

После того, как вы закончите использовать базу данных и закроете курсор, вы можете сделать что-то вроде:

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

Вы можете поместить это в блок finally, чтобы быть уверенным, что он всегда будет выполняться (учитываячто ваши операции с БД заключены в try / catch).

0 голосов
/ 15 декабря 2011

вызов super.close ();

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

       super.close();
0 голосов
/ 15 декабря 2011
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();
}

попробуйте это;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...