Попытка создать таблицу sqlite

У меня есть класс базы данных в java, где я пытаюсь создать новую таблицу в sqlite. Таблицы создаются при компиляции приложения, но по какой-то причине, когда я добавляю новую строку для добавления новой таблицы, она не создается. Мой класс db выглядит так:

public static final String DATABASE_NAME = "something_db";

    private Lock writeLock;
    private boolean locked;

    private DataBase(Context context)
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);

        writeLock = new ReentrantLock();
    }

    @Override
    public void onCreate(SQLiteDatabase db)
    {
        onCreateV1(db);
        onCreateV2(db);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
        if (oldVersion == 1 && newVersion == 2)
        {
            onCreateV2(db);
        }
    }

    private void onCreateV1(SQLiteDatabase db)
    {
        db.execSQL("create table schedule (id integer, day integer, start text, end text, points double, unique(id) on conflict replace)");
        db.execSQL("create table zone(id integer, name text, imageUrl text, imageFileName text, points double, unique(id) on conflict replace)");
        db.execSQL("create table zoneLocation(zoneId integer, locationOrder integer, latitude double, longitude double, unique(zoneId, locationOrder) on conflict replace)");
        db.execSQL("create table userLocation(id integer primary key, timestamp integer, latitude double, longitude double, speed double)");
        db.execSQL("create table userPoint(id integer primary key, timestamp text, scheduleId integer, scheduleMultiplier double, speedRangeId integer, speedRangeMultiplier double, zoneId integer, zoneMultiplier double, latitude double, longitude double, total double, sent integer)");
        db.execSQL("create table userTransaction(userId integer, date text, points double, unique(userId, date) on conflict replace)");
        db.execSQL("create table speedRange(id integer, name text, lowerLimit double, points double, unique(id) on conflict replace)");

Я попытался добавить новую строку для создания новой таблицы, но каждый раз, когда я компилирую приложение, он сообщает мне

E/SQLiteLog: (1) no such table: UserTopChallengers

Разве не должно хватить простого добавления строки к создаваемой таблице других? Почему добавленная мной таблица не создается вместе с другими.

Можете ли вы показать нам используемую вами строку, которая должна добавить новую строку?

hannojg 08.05.2018 01:35

У кода, который вы опубликовали, кажется, отрублен конец.

sticky bit 08.05.2018 01:36

Вы не создаете UserTopChallengers в приведенном выше коде.

Hitham S. AlQadheeb 08.05.2018 01:36

Обновите код, о котором идет речь, для лучшей помощи

UsamaAmjad 08.05.2018 02:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
32
1

Ответы 1

Метод onCreate запускается только один раз при создании базы данных. Если вы удалите данные приложения или удалите приложение, база данных, являющаяся частью данных приложения, будет удалена, и затем будет запущен метод onCreate. Обратите внимание, что удаление данных приложения приведет к потере всех данных, которые могут у вас быть.

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

Вероятно, вам будет проще удалить данные приложения или удалить приложение, а затем повторно запустить приложение. Без полного кода невозможно дать конкретное решение.

Другие вопросы по теме