У меня есть класс базы данных в 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
Разве не должно хватить простого добавления строки к создаваемой таблице других? Почему добавленная мной таблица не создается вместе с другими.
У кода, который вы опубликовали, кажется, отрублен конец.
Вы не создаете UserTopChallengers в приведенном выше коде.
Обновите код, о котором идет речь, для лучшей помощи




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