可序列化对象的ORMLite查询字符串

时间:2018-03-06 10:01:12

标签: android ormlite

我在实体中添加了一个新列,如:

@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是否正确?或者是否有其他可能的方法在现有表中添加可序列化对象?

1 个答案:

答案 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主题中定义和注册自己的容器。