ORMLite 在向 table 添加列时删除数据
ORMLite dropping data when adding a column to the table
在我的 Android 应用程序中,我使用 ORMLite 将数据存储到本地数据库中,并且在使用 onUpgrade()
方法向该数据库添加列时,我获取了table 被删除。
我正在使用 ORMLite 文档中提到的 upgrade schema 方式:
private static final int DATABASE_VERSION = 10;
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVer, int newVer) {
try {
if(oldVer < 10){
getGuardiansDao().executeRaw("ALTER TABLE `messages` ADD COLUMN updated_by TEXT;");
getGuardiansDao().executeRaw("ALTER TABLE `messages` ADD COLUMN updated_by_time TEXT;");
}
} catch (SQLException e) {
Log.e(DBManager.class.getName(), "Unable to upgrade database from version " + oldVer + " to new "
+ newVer, e);
}
}
并在 class 中分配给 table:
@DatabaseTable(tableName = "messages")
public class Message extends Object implements Parcelable{
.
.
.
@DatabaseField
private String updatedBy;
@DatabaseField
private String updatedByTime;
}
现在执行后,它会删除存储在 table messages
中的所有数据,我不知道为什么会这样。
Now after executing that it erases all the data stored in the table messages and I don't have any clue why that is happening.
当然,您发布的代码不会删除 table 并且 ORMLite 不会自动执行此操作或任何操作。是否有可能由于某种原因调用 onCreate(...)
方法?
有很多方法可以对此进行调试,但您可以在 onUpgrade(...)
方法中使用原始语句记录 table 的内容,以确保正确构建 table。那么你也许可以检测到它何时被清除了。
在我的 Android 应用程序中,我使用 ORMLite 将数据存储到本地数据库中,并且在使用 onUpgrade()
方法向该数据库添加列时,我获取了table 被删除。
我正在使用 ORMLite 文档中提到的 upgrade schema 方式:
private static final int DATABASE_VERSION = 10;
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVer, int newVer) {
try {
if(oldVer < 10){
getGuardiansDao().executeRaw("ALTER TABLE `messages` ADD COLUMN updated_by TEXT;");
getGuardiansDao().executeRaw("ALTER TABLE `messages` ADD COLUMN updated_by_time TEXT;");
}
} catch (SQLException e) {
Log.e(DBManager.class.getName(), "Unable to upgrade database from version " + oldVer + " to new "
+ newVer, e);
}
}
并在 class 中分配给 table:
@DatabaseTable(tableName = "messages")
public class Message extends Object implements Parcelable{
.
.
.
@DatabaseField
private String updatedBy;
@DatabaseField
private String updatedByTime;
}
现在执行后,它会删除存储在 table messages
中的所有数据,我不知道为什么会这样。
Now after executing that it erases all the data stored in the table messages and I don't have any clue why that is happening.
当然,您发布的代码不会删除 table 并且 ORMLite 不会自动执行此操作或任何操作。是否有可能由于某种原因调用 onCreate(...)
方法?
有很多方法可以对此进行调试,但您可以在 onUpgrade(...)
方法中使用原始语句记录 table 的内容,以确保正确构建 table。那么你也许可以检测到它何时被清除了。