我在实体中添加了一个新列,如:
@DatabaseField(persisterClass = SerializableType.class)
Account account;
该表已在之前的应用版本中创建。所以在OrmLiteSqliteOpenHelper
中,我必须在函数中执行一个查询字符串:
@Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
try {
if (oldVersion < 2) {
String userTable = DatabaseTableConfig.extractTableName(User.class);
getDao(User.class).executeRaw("ALTER TABLE `" + userTable + "` ADD COLUMN account SERIALIZABLE;");
}
} catch (SQLException e) {
}
}
查询字符串应该是什么?查询字符串alter table xyz add column abc serializable
是否正确?或者是否有其他可能的方法在现有表中添加可序列化对象?
答案 0 :(得分:1)
OrmLite将可序列化对象持久化为SQL类型VARBINARY
。这是一种特殊类型,它将对象序列化为一个字节序列,然后在返回的路上对其进行反序列化。该字段必须是实现java.io.Serializable接口的对象。根据数据库类型,可以存储的对象大小有限制
注意:要使用此类型,必须使用dataType字段指定DataType.SERIALIZABLE
。它不会被自动检测到。请参见DatabaseField dataType。
// account is an object that implements Serializable
@DatabaseField(dataType = DataType.SERIALIZABLE)
Account account;
您也可以在this主题中定义和注册自己的容器。