向 sqlite 添加新的 table
Adding new table to sqlite
对于 SQLiteOpenHelper,如果我在 onCreate
中添加一个新的 table,我是否必须在 onUpgrade
中做任何事情?我正在添加一个全新的 table。我相信我必须更改版本号,但 onUpgrade
应该保持为空。对吗?
如果您希望应用程序的现有安装添加这个新的 table,那么是的,您必须增加版本并提供 suitable onUpgrade()
实现,以及在 onCreate()
中添加 table (你说你已经完成了)。
一个空的 onUpgrade()
实现是不够的;它必须实际做一些事情。有些人删除所有 table 并直接调用 onCreate()
,但如果您试图保留现有数据,这显然效果不佳。我通常使用 fall-through switch
习惯用法,这样如果用户落后一个以上的版本(例如,你发布了版本 3 而用户仍在版本 1),他们将按顺序完成所有必要的升级:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (oldVersion) {
case 1:
db.execSQL("CREATE TABLE " + ...);
// no break statement, so case 2 will execute after this.
case 2:
// more execSQL(), etc
}
}
仅当您增加版本号时才会调用 onUpgrade。
要实现它,您必须使用所做的任何更改重新创建表并复制任何现有数据。有很多关于这个主题的教程。
如果您仍在学习,则没有必要实施,但如果您不这样做并且对架构进行了任何更改,则需要从设备上卸载该应用,否则更改将不会应用.
如果用户之前已经安装了您的应用程序,则不会调用 onCreate()
。因此,您还需要在 onUpgrade()
中创建新的 table。请务必增加数据库的版本号。
我建议将创建 table 的代码放在辅助方法中,以便您可以从两个回调方法中调用它。如果您需要更改代码以创建 table.
,这将减少出错的可能性
对于 SQLiteOpenHelper,如果我在 onCreate
中添加一个新的 table,我是否必须在 onUpgrade
中做任何事情?我正在添加一个全新的 table。我相信我必须更改版本号,但 onUpgrade
应该保持为空。对吗?
如果您希望应用程序的现有安装添加这个新的 table,那么是的,您必须增加版本并提供 suitable onUpgrade()
实现,以及在 onCreate()
中添加 table (你说你已经完成了)。
一个空的 onUpgrade()
实现是不够的;它必须实际做一些事情。有些人删除所有 table 并直接调用 onCreate()
,但如果您试图保留现有数据,这显然效果不佳。我通常使用 fall-through switch
习惯用法,这样如果用户落后一个以上的版本(例如,你发布了版本 3 而用户仍在版本 1),他们将按顺序完成所有必要的升级:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (oldVersion) {
case 1:
db.execSQL("CREATE TABLE " + ...);
// no break statement, so case 2 will execute after this.
case 2:
// more execSQL(), etc
}
}
仅当您增加版本号时才会调用 onUpgrade。
要实现它,您必须使用所做的任何更改重新创建表并复制任何现有数据。有很多关于这个主题的教程。
如果您仍在学习,则没有必要实施,但如果您不这样做并且对架构进行了任何更改,则需要从设备上卸载该应用,否则更改将不会应用.
onCreate()
。因此,您还需要在 onUpgrade()
中创建新的 table。请务必增加数据库的版本号。
我建议将创建 table 的代码放在辅助方法中,以便您可以从两个回调方法中调用它。如果您需要更改代码以创建 table.
,这将减少出错的可能性