Недавно я узнал, как использовать SQLite3 на ОС Android. Но у него есть неприемлемая часть.Почему SQLiteOpenHelper удаляет таблицу в методе «onUpgrade»?
Я не могу понять, почему вы отбрасываете таблицу при вызове метода onUpgrade для SQLiteOpenHelper. Зачем нужен метод «onUpgarde»?
Если код выполняет «drop table», данные таблицы старой версии DB будут удалены, не так ли?
Зачем удалять существующие данные старой БД?
Как восстановить существующие данные БД при удалении таблицы?
[Здесь познается код]
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
final String CONFIRMED_SHEETS_TABLE = "confirmed_sheets";
public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String sql = "create table" +
CONFIRMED_SHEETS_TABLE +
"_id integer primary key autoincrement, " +
"group text, " +
"num001 text, " +
"num002 text, " +
"num003 text, " +
"num004 text, " +
"num005 text, " +
"num006 text, " +
"date text)";
sqLiteDatabase.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
// non acceptable part //
String sql = "drop table if exists " + CONFIRMED_SHEETS_TABLE;
sqLiteDatabase.execSQL(sql);
onCreate(sqLiteDatabase);
}
}
Команда 'drop table' вызывается * вашим * кодом, а не системой. Вы можете взять это и сделать миграционную логику. –
Знаете ли вы, почему изученный код выполняет «drop table»? –
Мне интересно в этой части. –