This is good stuff.  Definitely thanks for the responses...

-Cameron

On Wed, May 14, 2008 at 12:51 PM, jason_williams_mm
<[EMAIL PROTECTED]> wrote:
> You can skip the step of sending this to a ByteArray and
> Base64Encoding it, by using the additional affinities added for AIR
> applications.  For example, using the following create statement:
>
> CREATE TABLE vo (objID String UNIQUE NOT NULL, objValue Object);
>
> You can then store the objects directly using a parameterized query
> like the following:
>
> myStatement.text = "INSERT INTO vo VALUES (:objID, :objValue);";
> myStatement.parameters[":objID"] = vo.uid;
> myStatement.parameters[":objValue"] = vo;
> myStatement.execute();
>
> Reading them out of the database is done with a simple select:
>
> myStatement.text = "SELECT objValue FROM vo WHERE objID = :objID";
> myStatement.parameters[":objID"] = textInput.text;
> myStatement.execute();
>
> The SQLResult.data property will then have a single object in the
> array (should it be found) that is the stored object (no conversion
> from bytearray, or encoding required).  You still have to use the
> [RemoteObject] metadata.  Don't forget that this approach occludes the
>  object from creating selective queries, but, you can hoist properties
> that are deemed necessary to columns in the table and allow searching
> against those.
>
>
> --- In flexcoders@yahoogroups.com, "jer_ela" <[EMAIL PROTECTED]> wrote:
>>
>> 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" <cameronc@>
>> 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: cameronc@
>> >
>>
>
>
>
> ------------------------------------
>
> --
> Flexcoders Mailing List
> FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> Search Archives: 
> http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo! Groups Links
>
>
>
>



-- 
Cameron Childress
Sumo Consulting Inc
http://www.sumoc.com
---
cell: 678.637.5072
aim: cameroncf
email: [EMAIL PROTECTED]

Reply via email to