我进行 AS3 Air 开发并使用 SQLite 在会话之间存储对象,这在AS3 Developer Guide和AS3 SDK Reference中有详细记录。
存储在数据库中的类实现 IExternalizable,以便可以使用 BLOB 存储和恢复实例。这很有效,但我很难找到如何正确应对错误的反序列化。问题出现在以下情况:
- 对象序列化
- 对象已保存
- 班级改变和程序更新
- 序列化数据不再匹配保存的数据
我最初的方法是这样的:
public class SampleClass implements IExternalizable
{
public static const version:int = 1; //increments upon program update
public var idata:int;
public function readExternal(data:IDataInput):void{
if(version != data.readInt()) //check for corrupted data
throw new IOError();
idata = data.readInt();
}
public function writeExternal(data:IDataOutput):void{
data.writeInt(version);
data.writeInt(idata);
}
}
可悲的是,在 readExternal 中抛出错误会导致我的 SQLStatement.execute() 严重失败,并且 try..catch 没有用。
我目前处理这个问题的想法:
- 程序更新时擦除数据库中的所有数据(哎哟)
- 向类添加标志以指示反序列化错误
- 使 SQLStatement.execute() 对抛出的错误做出正确反应
1和2我知道怎么做,但都不漂亮。3 我没有找到解决方案(还没有?)
其他想法或专业知识表示赞赏。