Как обновить таблицу в sqlite? - PullRequest
3 голосов
/ 22 марта 2012

У меня две таблицы: «TABLE_SUBJECT», а «TABLE_CHAPTER». Теперь я хочу
добавить столбец и удалить предыдущий. Мой вопрос в том, как это сделать. я пытаюсь обновить но
он отображает предыдущий, а не новый. Мне нужно удалить предыдущую и обновить таблицу с новым столбцом.
Я изменяю номер версии, но он не работает. Пожалуйста, дайте мне подсказку или ссылку.

Вот мой код SQLite:

@Override
public void onCreate(SQLiteDatabase database) {

    database.execSQL(DATABASE_CREATE);
    database.execSQL(DATABASE_CREATE1);

}

 @Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub
    Log.w(MySQLiteHelper.class.getName(), "Upgrading database from version "
            + oldVersion + " to " + newVersion
            + ", which will destroy all old data");
    database.execSQL("DROP TABLE IF EXISTS " + TABLE_SUBJECT);
    database.execSQL("DROP TABLE IF EXISTS" + TABLE_CHAPTER);
    onCreate(database);
}

Ответы [ 2 ]

6 голосов
/ 22 марта 2012

вы попробуете этот код

public long update_todo_not(String a, String b, String c, String d,
        String e, String f, String g, String id) {
     ContentValues con = new ContentValues();

     con.put("title", a);
     con.put("description", b);
     con.put("due_date", c);
     con.put("alarm_time", d);
     con.put("category", e);
     con.put("alarm_set",f);
     con.put("priority", g);
     Log.v("priority", g+"");
     return mDb.update(DATABASE_TABLE_TODO_LIST, con, "id ='" + id + "'",null);

}
3 голосов
/ 22 марта 2012

Вы не можете удалить столбцы в SQLite. Обходной путь описан здесь в FAQ .

Чтобы добавить новый столбец, вы можете просто увеличить версию базы данных и изменить полученные строки создания на нужный макет базы данных (удалить столбец, который вы хотите удалить, и добавить другой). При следующем открытии базы данных вызывается onUpgrade, который удаляет существующие таблицы. После этого измененные таблицы создаются. Это не очень хороший метод, потому что вы теряете все данные в базе данных.

Чтобы добавить новый столбец без потери всех данных, вы должны изменить метод onUpgrade на что-то вроде этого (это предполагает, что ваша текущая версия базы данных равна 1, если не просто изменить число в регистре), а затем увеличить версию базы данных. :

@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
    switch (oldVersion) {
    case 1: 
        database.execSQL("ALTER TABLE " + 
            TABLE_SUBJECT + " ADD COLUMN " + KEY_NEWCOLUMN + " text not null");
        database.execSQL("ALTER TABLE " + 
            TABLE_CHAPTER + " ADD COLUMN " + KEY_NEWCOLUMN + " text not null");
    }
}

Этот метод является масштабируемым, потому что при появлении новых изменений вы можете просто добавить случай 2, случай 3 ... Не добавлять разрыв в конце случая. Таким образом, если обновление приложения увеличивает версию до 3, а обновленное приложение все еще находится на 1 (возможно, оно пропустило обновление), все изменения применяются.

Здесь вы можете найти документацию для изменения таблицы. Сайт sqlite (sqlite.org), как правило, очень помогает найти такие вещи.

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