Добавление новой таблицы в базу данных после однократного запуска приложения - PullRequest
5 голосов
/ 07 декабря 2011

Я делаю простую базу данных в Android. Я хочу добавить новую таблицу после того, как мой код был выполнен один раз. Теперь, когда я пытаюсь изменить свой метод onCreate () в классе EventDataSqlHelper, мое приложение вылетает.

Вероятно, это связано с тем, что onCreate(), связанный с SQLiteOpenHelper, выполняется только при первом запуске приложения, и мы не можем вносить в него дальнейшие изменения.

Я также попытался написать отдельную функцию для добавления новой таблицы. Он отлично работал при первом выполнении. Но во втором случае он перезапишет свою предыдущую базу данных, что приведет к сбою приложения.

Есть ли способ добавить новые таблицы в базу данных, если база данных уже создана?

package org.example.sqldemo;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;
import android.util.Log;

/** Helper to the database, manages versions and creation */
public class EventDataSQLHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "events.db";
    private static final int DATABASE_VERSION = 1;

    // Table name
    public static final String TABLE = "events";

    // Columns
    public static final String TIME = "time";
    public static final String TITLE = "title";

    public EventDataSQLHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "create table " + TABLE + "( " + BaseColumns._ID
                + " integer primary key autoincrement, " + TIME + " integer, "
                + TITLE + " text not null);";
        Log.d("EventsData", "onCreate: " + sql);
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {


    }


}

Ответы [ 2 ]

8 голосов
/ 07 декабря 2011

Это то, для чего onUpgrade и DATABASE_VERSION предназначены.

Пример:

  • У вас есть таблица events, и она выполняется на телефоне.
  • Теперь вы решаете, вам нужна новая таблица users.

    1. изменить DATABASE_VERSION = 2; (это ваш номер версии)
    2. в onCreate(),создать все таблицы (create table events & create table users)
    3. в onUpgrade(), создать все таблицы, которые изменились между версиями oldVersion и newVersion (create table users)
  • Позже, если вы хотите добавить новые таблицы, снова увеличьте DATABASE_VERSION и создайте все таблицы в onCreate, а изменения в onUpgrade

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

Вы можете использовать CREATE TABLE IF NOT EXISTS TABLENAME ... в качестве запроса, который не перезапишет вашу существующую таблицу.

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