【发布时间】:2013-11-29 02:22:00
【问题描述】:
我最近学习了一种在 Android 操作系统上使用 SQLite3 的方法。 但它有一个不可接受的部分。
我不明白为什么在调用 SQLiteOpenHelper 的“onUpgrade”方法时删除表。 为什么需要“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”吗?
-
我想知道这部分。