gpt4 book ai didi

android - 为什么 SQLiteOpenHelper 会删除 "onUpgrade"方法中的表?

转载 作者:行者123 更新时间:2023-11-29 14:32:05 29 4
gpt4 key购买 nike

我最近学习了一种在 Android 操作系统上使用 SQLite3 的方法。但它有一个 Not Acceptable 部分。

我不明白为什么在调用 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);
}
}

最佳答案

If code executes "drop table", DB table data of old version DB will be removed, isn't it?

是的

Why need "onUpgrade" method?

如果您正在切换数据库(例如,因为您添加了一个新列),您的应用程序(通常)现在取决于该更改。增加 Helper 类中的数据库版本会调用 onUpgrade(),这使您可以处理任何迁移,让应用准备好使用您的新架构。

Did you know why learned code executes "drop table"?

方便。这不一定是正确的方法,但数据库更改会使获取旧数据并将其合并到新表中变得困难。因此,简单地重新开始在逻辑上更容易。

如果要合并现有表和新表,请查看 this question .

关于android - 为什么 SQLiteOpenHelper 会删除 "onUpgrade"方法中的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20277410/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com