Android не выполняет оператор создания - PullRequest
0 голосов
/ 02 апреля 2012

Я создаю новую базу данных в своей деятельности следующим образом:

@Override
public void onCreate(Bundle savedInstanceState) {
    Log.d(TAG, "onCreate called");
    super.onCreate(savedInstanceState);

    Log.d(TAG, "create DatabaseOpenHelper");
    DatabaseOpenHandler helper = new DatabaseOpenHandler(this);

    Log.d(TAG, "get readable database access");
    database = helper.getReadableDatabase();

    Log.d(TAG, "create Cursor for database access");
    Cursor data = database.query(DatabaseConstants.TABLE_NOTES, fields,
            null, null, null, null, null);

    Log.d(TAG, "create SimpleCursorAdapter for ListView");
    dataSource = new SimpleCursorAdapter(this,
            R.layout.conference_note_item, data, fields,
            new int[] { R.id.note_text });

    Log.d(TAG, "set ListAdapter");
    setListAdapter(dataSource);

}

но мой DatabaseOpenHandler не вызывает метод onCreate.

public DatabaseOpenHandler(Context context) {
    super(context, DatabaseConstants.DATABASE_NAME, null,
            DatabaseConstants.DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    Log.d(TAG, "onCreate called");
    db.execSQL(DatabaseConstants.CREATE_TABLE_NOTES);
}

Мой SQL-запрос:

public static final String CREATE_TABLE_NOTES = "CREATE TABLE "
        + TABLE_NOTES + " (" + NOTE_ID
        + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NOTE_CONFERENCE
        + " INTEGER, " + NOTE_DATE + " INTEGER, " + NOTE_TEXT
        + " INTEGER);";

Ответы [ 3 ]

2 голосов
/ 02 апреля 2012

Метод жизненного цикла SQLiteOpenHelper.onCreate() - только , вызываемый, когда база данных уже не существует. Он запускается в первый раз, когда нет базы данных. Предполагая, что в вашем коде нет ошибок, измените имя базы данных в вашем dbadapter, и она будет выполнена.

0 голосов
/ 02 апреля 2012

Если вы обновите DATABASE_VERSION, то будет вызван метод onUpgrade(...) вашей реализации SQLiteOpenHelper, вы можете использовать его для удаления существующих таблиц и их повторного создания (возможно, путем явного вызова onCreate(...)).

Это то, что я делаю всякий раз, когда я делаю изменения в своей базе данных во время разработки.

Примечание: когда ваше приложение развернуто, вы, вероятно, захотите сделать хорошую логику миграции, чтобы не потерять все данные ваших пользователей.

Пример кода:

private static class OpenHelper extends SQLiteOpenHelper {

    private String CLASS_NAME;

    OpenHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        CLASS_NAME = getClass().getSimpleName();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        Logger.log(Level.VERBOSE, CLASS_NAME + " - onCreate",
                "Creating tables");
        db.execSQL(CREATE_MY_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Logger.log(Level.VERBOSE, CLASS_NAME + " - onUpgrade",
                "Upgrading database, this will drop tables and recreate.");
        db.execSQL("DROP TABLE IF EXISTS " + MY_TABLE_NAME);
        onCreate(db);
    }
}
0 голосов
/ 02 апреля 2012

Oncreate вызывается только , только если база данных не существует ... и должна быть создана новая база данных .. и, если база данных уже создана, oncreate не вызывается ..

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