データの永続化をする方法として2つの方法のご紹介。SharedObjectSharedObjectは KeyとValueの組み合わせの簡単なデータ。。。例えば、ログイン情報の保持とか、画面のX,Y座標とか。。。にベストマッチ。使い方も簡単ですので、ちょっとしたものにはこちらを使うといいと思います。 http://livedocs.adobe.com/flex/3/langref/flash/net/SharedObject.html 保存の仕方としても種類があって
私は試していないんですがリモートで保存した場合、値変更時すると接続している各クライアントに通達が渡って自動的に更新されるような感じ?であれば便利ですね。 ローカルの場合のサンプルimport flash.net.SharedObject; user_email, api_key, user_id をKEYに保存することができます。var sharedObject:SharedObject = SharedObject.getLocal("FileName"); sharedObject.data.user_email = "abc@sample.com"; sharedObject.data.api_key = "ABC"; sharedObject.data.user_id = "user001"; sharedObject.flush(); 逆に読み込みの場合では var sharedObject:SharedObject = SharedObject.getLocal("FileName"); とすればOK!email:String = sharedObject.data.user_email 保存される場所ですが、指定をしなかった場合Macでは、 /Users/{ユーザ名}/Library/Preferences/{プロジェクトID}/Local Store/#SharedObject/ に入っていました。拡張子は .swfみたいです。 プロジェクトIDというのは、AIRの場合ApplicationDescriptor(application.xml)に記述しているIDです。 このIDはユニークになるようなものを指定するのはまぁ当然なんですが、そうしないとファイルカブっちゃぅかもよ?ということですね。 SQLiteAIRでは、組み込みDBとしてSQLiteが使えます。細かい情報を色々保存したい、検索したい。。。などの場合はこちらの方が便利。 DBのConnectionの作成const FILE_PATH:String = "app-storage:/MyTest.db"; SQLLiteはファイルにデータを保存するので、そのファイルをまず作成しています。var file:File = new File(FILE_PATH); var conn:SQLConnection = new SQLConnection(); conn.addEventListener(SQLEvent.OPEN, function(event:SQLEvent):void {trace("接続成功")}, false, 0, true); conn.openAsync(file); app-storageと書くと結局SharedObject同様、プロジェクトのディレクトリが指定されることになるみたい。 つまり、Macだと/Users/{ユーザ名}/Library/Preferences/{プロジェクトID}/Local Store/のところ。 openAsyncというのは非同期モードで接続、openというのは同期モードで接続します。 次にSQLを実際実行していく訳ですが、SQL実行した後、処理が完了してから次のコードに行ってほしい場合には同期モード、完了をまたなくてもいいのであれば非同期モードを使います。 非同期モードの場合、それなりの設計をしてないとコンガラガってくると思うのでお試しであればopenの方をおすすめ。 SQLの実行何かするにはまずテーブルを作成しないといけない訳ですが、SQLの設定、実行するクラスはflash.data.SQLStatementになります。JDBCも似た感じだから想像つきますよねw var sql:String = "...."; SQLStatementのクラスにコネクション、SQLを渡して実行!という形です。var stmt:SQLStatement = new SQLStatement(); stmt.sqlConnection = conn; stmt.text = sql; stmt.execute(); sql文は、普通にCREATE TABLE文を書いていけばいいのですが、アプリケーションとしては、 もしテーブルが無かった場合には作りたい としたいですよね。 そんな場合は "CREATE TABLE IF NOT EXISTS tablename...." としてあげればいいみたい。 結果の取得、エラー情報の取得はSQLStatementにaddEventListenerしてあげます。
SELECT文でのバインド変数は SQLStatement#parameters のプロパティを使えばOK。 バインドの方法は stmt.parameters[0] と位置を指定したり、名前で指定したりと色々あるみたい。 |