我做AS3 Air開發並使用SQLite在會話之間存儲對象,這些對象在AS3 Developer Guide以及AS3 SDK Reference中有詳細記錄。如何處理數據不一致? AS3 IExternalizable.readExternalData + sqlstatement.execute()
存儲在數據庫中的類實現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我沒有找到解決方案(尚未?)
其他想法或專業知識的讚賞。
謝謝你的回覆。我從來沒有見過像這樣使用過的命名空間 - 你每天都變得更聰明。 –