Here is one I have been working on. It serializes the object with AMF so it only needs one table. Note that your classes need to have a [RemoteClass] metadata tag ( no alias needed) in order for them to be deserialized correctly. Note that the static initialize method needs to be called before the class can be instantiated.
package CloudSplitter.CodeGenerator.business { import flash.data.SQLConnection; import flash.data.SQLResult; import flash.data.SQLStatement; import flash.errors.SQLError; import flash.filesystem.File; import flash.utils.ByteArray; import mx.controls.Alert; import mx.utils.Base64Decoder; import mx.utils.Base64Encoder; public class PersistanceManager { static private var connection:SQLConnection; private var tableName:String = "persistant_object"; static public function initialize(persistanceDbName:String):void { if (connection == null) { connection = createConnection(persistanceDbName); } } static public function getConnection():SQLConnection { if (connection == null) { throw new Error("PersistanceManager has not been initialzed"); } else { return connection; } } public function PersistanceManager() { if (connection == null) { throw new Error("PersistanceManager can not be instantiated until it has been initialzed"); } } static private function createConnection(persistanceDbName:String):SQLConnection { var connection:SQLConnection = new SQLConnection(); var dbFile:File = File.applicationStorageDirectory.resolvePath(persistanceDbName); try { connection.open(dbFile); } catch (error:SQLError) { showError(error); } return connection; } public function createPersistanceTable():Boolean { var createStmt:SQLStatement = new SQLStatement(); createStmt.sqlConnection = connection; var sql:String = "CREATE TABLE IF NOT EXISTS " + tableName + " ( " + tableName + "_id INTEGER PRIMARY KEY AUTOINCREMENT" + " ,identifier TEXT UNIQUE NOT NULL" + " ,object_data BLOB" + ")"; createStmt.text = sql; try { createStmt.execute(); var success:Boolean = true; } catch (error:SQLError) { showError(error); success = false; } return success; } public function persistObject(identifier:String, object:Object):void { var byteArr:ByteArray = new ByteArray(); byteArr.writeObject(object); var encoder:Base64Encoder = new Base64Encoder(); encoder.encodeBytes(byteArr); var encoded:String = encoder.toString() var sqlResult:SQLResult = retrieveRecord(identifier); if (sqlResult.data == null) { var sql:String = "INSERT INTO " + tableName + " ( identifier, object_data ) " + " values ( '" + identifier + "', '" + encoded + "' )"; } else { sql = "UPDATE " + tableName + " SET object_data = '" + encoded + "' " + " where identifier = '" + identifier + "'"; } execSql(sql); } private function retrieveRecord(identifier:String): SQLResult { var sql:String = "SELECT * FROM " + tableName + " WHERE identifier = '" + identifier + "'"; var sqlResult:SQLResult = execSql(sql); return sqlResult } public function retrieveObject(identifier:String):Object { var sqlResult:SQLResult = retrieveRecord(identifier); var retrievedObject:Object; if (sqlResult.data != null) { var encodedObject:String = sqlResult.data[0].object_data; var decoder:Base64Decoder = new Base64Decoder(); decoder.decode(encodedObject); var byteArr:ByteArray = decoder.toByteArray(); retrievedObject = byteArr.readObject(); } return retrievedObject; } public function deleteObject(identifier:String):void { var sql:String = "DELETE FROM " + tableName + " WHERE identifier = '" + identifier + "'"; var result:SQLResult = execSql(sql); } private function execSql(sql:String):SQLResult { var statement:SQLStatement = new SQLStatement(); statement.text = sql; statement.sqlConnection = connection; statement.execute(); var sqlResult:SQLResult = statement.getResult(); return sqlResult } static private function showError(error:SQLError):void { Alert.show("Details: " + error.details, "Error message: " + error.message); } } } --- In flexcoders@yahoogroups.com, "Cameron Childress" <[EMAIL PROTECTED]> wrote: > > Is anyone aware of any Lightweight AIR Persistence mechanisms (in the spirit > of Hibernate) for VOs? I am working alot of AIR and SQLite and mostly when > I am using SQLite, I'm just mimicking the VO structure for storing objects > and then bringing them back out later. It's alot more code than I like to > write and it just doesn't feel right. > > I'd love to be able to say "myValueObject.save(dbAlias)" or > "myDBEngine.save(myValueObject)" and have my object stored in a SQLite DB > for later retrieval, creating tables on the fly as needed based on the VO's > property datatypes. Anyone aware of any efforts along these lines? > > Any other ways of looking at this problem that I am simply missing? > > -Cameron > > -- > Cameron Childress > Sumo Consulting Inc > http://www.sumoc.com > --- > cell: 678.637.5072 > aim: cameroncf > email: [EMAIL PROTECTED] >