Сбой приложения из-за создания базы данных при каждом запуске - PullRequest
1 голос
/ 24 декабря 2010

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

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

Ответы [ 2 ]

4 голосов
/ 24 декабря 2010

Вы можете расширить класс SQLiteOpenHelper для обработки различных версий вашей базы данных. Вот пример:

public class MyDbOpenHelper extends **SQLiteOpenHelper** {
    final static int VERSION = 2;

    public MyDbOpenHelper(Context context, String dbname) {
        super(context, dbname, null, VERSION);
    }

    @Override
    public void **onCreate**(SQLiteDatabase db) {
        /* TODO SQL-Queries for new Database */
    }

    @Override
    public void **onUpgrade**(SQLiteDatabase db, int oldVersion, int newVersion) {
        /* SQL-Queries t*/
        if (oldVersion < 2) {
            db.execSQL("ALTER TABLE my_table ADD COLUMN new_attrubte INTEGER");
        }
    }
}

Дескриптор базы данных является новым в onCreate, и если он существует, onUpgrade вызывается с существующим номером версии в параметре oldVersion.

4 голосов
/ 24 декабря 2010

SQLite имеет команду a CREATE TABLE IF NOT EXISTS. Вы можете попробовать это.

Обычно попытка создать новую таблицу в базе данных, которая уже содержит таблицу, индекс или представление с тем же именем, является ошибкой. Однако, если предложение «IF NOT EXISTS» задано как часть оператора CREATE TABLE, а таблица или представление с таким же именем уже существует, команда CREATE TABLE просто не имеет никакого эффекта (и сообщение об ошибке не возвращается). Ошибка по-прежнему возвращается, если таблица не может быть создана из-за существующего индекса, даже если указано условие «IF NOT EXISTS».

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