2012-03-22 2 views
3

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

Вот мой некоторый код 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); 
} 

ответ

6

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

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

Вы не можете удалять столбцы в 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 (возможно, оно пропустило обновление), все изменения применяются.

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

+0

Я только что прочитал ваш ответ, и мне было просто интересно, как это приложение знать, какую версию базы данных это происходит? В исходном вопросе есть только 'database.execSQL (DATABASE_CREATE);', который не указывает, какой версией является база данных, я столкнулся с той же проблемой на данный момент – Sjharrison

Смежные вопросы