Flash Builder4 を使って 組み込み DB AIR アプリ開発 2011 年 2 月 9 日(水) 徳山禎男 FlexUserGroup 勉強会 第 130 回@東京
アジェンダ 自己紹介 ローカルデータベース とは 接続からクエリ実行までの  実装方法 Flash Builder で作成したデモアプリの披露
自己紹介 ハンドルネーム tokufxug 名前 徳山 禎男 所属 クエストコム株式会社
自己紹介 ハンドルネーム tokufxug WEB twitter : @tokufxug blog:   特産のもっさみな
ローカルデータベース
ローカルデータベース AIR アプリケーション内の情報をデータベースとして取り扱う事ができます。
ローカルデータベース AIR アプリケーション内の情報をデータベースとして取り扱う事ができます。 リレーショナルデータベースで、 SQL を発行してデータアクセスを行います。
ローカルデータベース 処理手順
ローカルデータベース 処理手順 ローカルデータベース作成
ローカルデータベース 処理手順 ローカルデータベース作成 データベース接続
ローカルデータベース 処理手順 ローカルデータベース作成 データベース接続 SQL 発行
ローカルデータベースの作成 ローカルデータベース用のファイルを作成します。
ローカルデータベースの作成 ローカルデータベース用のファイルを作成します。 var  dbFile:File =  File.applicationStorageDirectory. resolvePath( “dbFile.db” );
ローカルデータベースの作成 各 AIR アプリケーション固有のディレクトリを指します。 var  dbFile:File =  File.applicationStorageDirectory . resolvePath( “dbFile.db” );
ローカルデータベースの作成 ディレクトリパスのファイルオブジェクトを作成します。 var  dbFile:File =  File.applicationStorageDirectory. resolvePath ( “dbFile.db” );
データベース接続 使用するデータベースへ接続処理を行います。
データベース接続 使用するデータベースへ接続処理を行います。 var  dbCon:SQLConnection =  new SQLConnection();
データベース接続 DB 接続成功によるイベントリスナーを登録します。 dbCon.addEventListener( SQLEvent.OPEN , onOpen);
データベース接続 DB 接続失敗によるイベントリスナーを登録します。 dbCon.addEventListener( SQLErrorEvent.ERROR , onError);
データベース接続 openAsync メソッドを実行すると  非同期でデータベース接続を  行います。 dbCon.openAsync( dbFile );
データベース接続 接続が成功すると成功のイベントハンドラが呼ばれます。 function  onOpen(e:SQLEvent): void  { }
データベース接続 接続が失敗するとエラーのイベントハンドラが呼ばれます。 function  onError(e:SQLErrorEvent): void  { }
データベース接続までの流れ
データベース接続までの流れ var  dbFile:File = File.applicationStorageDirectory. resolvePath ( “dbFile.db” );
データベース接続までの流れ var  dbFile:File = File.applicationStorageDirectory. resolvePath ( “dbFile.db” ); var  dbCon:SQLConnection =  new  SQLConnection();
データベース接続までの流れ var  dbFile:File = File.applicationStorageDirectory. resolvePath ( “dbFile.db” ); var  dbCon:SQLConnection =  new  SQLConnection(); dbCon.addEventListener( SQLEvent.OPEN , onOpen);
データベース接続までの流れ var  dbFile:File = File.applicationStorageDirectory. resolvePath ( “dbFile.db” ); var  dbCon:SQLConnection =  new  SQLConnection(); dbCon.addEventListener( SQLEvent.OPEN , onOpen); dbCon.addEventListener( SQLErrorEvent.ERROR , onError);
データベース接続までの流れ var  dbFile:File = File.applicationStorageDirectory. resolvePath ( “dbFile.db” ); var  dbCon:SQLConnection =  new  SQLConnection(); dbCon.addEventListener( SQLEvent.OPEN , onOpen); dbCon.addEventListener( SQLErrorEvent.ERROR , onError); dbCon.openAsync( dbFile );
データベース接続までの流れ データベース接続サンプルのデモ
SQL 発行
SQL 発行 SQL を発行するクラスを生成します。
SQL 発行 SQL を発行するクラスを生成します。 var  sqlStmt: SQLStatement  =           new  SQLStatement ();
SQL 発行 DB コネクションクラスを設定します。 sqlStmt .sqlConnection  =  dbCon ;
SQL 発行 SQL 文を設定します。 sqlStmt .sqlConnection  =  dbCon ; sqlStmt.text =  “CREATE TABLE..” ;
SQL 発行 SQL 実行成功によるイベントリスナーを登録。 sqlStmt.addEventListener   ( SQLEvent.RESULT, onResult );
SQL 発行 SQL 実行失敗によるイベントリスナーを登録。 sqlStmt.addEventListener   (SQLErrorEvent.Error, onError);
SQL 発行 SQL を実行します。 sqlStmt. execute();
SQL 発行 SQL 発行が成功すると成功のイベントハンドラが呼ばれます。 function  onResult(e:SQLEvent): void  { }
SQL 実行までの流れ
SQL 実行までの流れ var  sqlStmt: SQLStatement  =  new  SQLStatement ();
SQL 実行までの流れ var  sqlStmt: SQLStatement  =  new  SQLStatement (); sqlStmt .sqlConnection  =  dbCon ;
SQL 実行までの流れ var  sqlStmt: SQLStatement  =  new  SQLStatement (); sqlStmt .sqlConnection  =  dbCon ; sqlStmt .text  =  “CREATE TABLE IF NOT EXISTS(…” ;
SQL 実行までの流れ var  sqlStmt: SQLStatement  =  new  SQLStatement (); sqlStmt .sqlConnection  =  dbCon ; sqlStmt .text  =  “CREATE TABLE IF NOT EXISTS(…” ; sqlStmt.addEventListener( SQLEvent.RESULT,  onResult );
SQL 実行までの流れ var  sqlStmt: SQLStatement  =  new  SQLStatement (); sqlStmt .sqlConnection  =  dbCon ; sqlStmt .text  =  “CREATE TABLE IF NOT EXISTS(…” ; sqlStmt.addEventListener( SQLEvent.RESULT,  onResult ); sqlStmt.addEventListener(SQLErrorEvent.Error,  onError);
SQL 実行までの流れ var  sqlStmt: SQLStatement  =  new  SQLStatement (); sqlStmt .sqlConnection  =  dbCon ; sqlStmt .text  =  “CREATE TABLE IF NOT EXISTS(…” ; sqlStmt.addEventListener( SQLEvent.RESULT,  onResult ); sqlStmt.addEventListener(SQLErrorEvent.Error,  onError); sqlStmt .execute() ;
SQL 実行までの流れ SQL 実行のデモ
パラメータを使用する。
パラメータを使用する。 登録、更新、検索、削除を行う場合、パラメータ指定を行う機能です。
パラメータを使用する。 登録、更新、検索、削除を行う場合、パラメータ指定を行う機能です。 sqlStmt .text  =  “SELECT * FROM “ +  “PERSON WHERE NAME =  :name ” ;  sqlStmt.addEventListener( SQLEvent.RESULT,  onResult );
パラメータを使用する。 登録、更新、検索、削除を行う場合、パラメータ指定を行う機能です。 sqlStmt .text  =  “SELECT * FROM “ +  “PERSON WHERE NAME =  :name ” ;  sqlStmt .parameters[ “:name” ] =  “ 徳山禎男” ; sqlStmt.addEventListener( SQLEvent.RESULT,  onResult );
パラメータを使用する。 登録、更新、検索、削除を行う場合、パラメータ指定を行う機能です。 sqlStmt.text = “SELECT * FROM “ +  “PERSON WHERE NAME =  :name ” ;  sqlStmt .parameters[ “:name” ] =  “ 徳山禎男” ; sqlStmt.addEventListener(SQLEvent.RESULT,  onResult);
検索結果の取得
検索結果の取得 SQLEvent.RESULT の イベントハンドラー内で検索結果を 取得します。
検索結果の取得 検索結果は、 SQLResult クラスから 取得します。
検索結果の取得 検索結果は、 SQLResult クラスから 取得します。 SQLStatement の プロパティ になります。
検索結果の取得 private   function  onResult(event: SQLEvent):void { }
検索結果の取得 private   function  onResult(event: SQLEvent):void { var  result: SQLResult  =  sqlStmt. getResult() ; }
検索結果の取得 SQLResult のプロパティ 、 data に 検索結果のデータを格納しています
検索結果の取得 SQLResult のプロパティ 、 data に 検索結果のデータを格納しています。 data プロパティは Array という配列の型です。
検索結果の取得 data プロパテイに 複数の Object 型のインスタンス が 格納しています。
検索結果の取得 data プロパテイに 複数の Object 型のインスタンス が 格納しています。 Object データ 1 件  =  テーブル 1 件 キーがカラム名、値がカラムの値
検索結果の取得 var  result: SQLResult  =  sqlStmt. getResult() ; var  array:Array = result. data ;
検索結果の取得 検索アプリを動かして みましょう。
SQL クラスをライブラリ化
SQL クラスをライブラリ化 今までお話したデータベース アクセスを、簡易化したクラスを作成。
SQL クラスをライブラリ化 //  データベースアクセスクラス var sql:SQLite = new SQLite();
SQL クラスをライブラリ化 //  データベースアクセスクラス var sql:SQLite = new SQLite(); sql.addEventListener(SQLEventResult, onResult);
SQL クラスをライブラリ化 //  データベースアクセスクラス var sql:SQLite = new SQLite(); sql.addEventListener(SQLEventResult, onResult); sql.text = “SQL 文” ; sql.access();
SQL クラスをライブラリ化
SQL クラスをライブラリ化
SQL クラスをライブラリ化
SQL クラスをライブラリ化
SQL クラスをライブラリ化
SQL クラスをライブラリ化
SQL クラスをライブラリ化 SQL クラスを使用した サンプルアプリデモ
まとめ
まとめ SQLite エンジンの ローカルデータベースが簡単に構築 できます。
まとめ SQLite エンジンの ローカルデータベースが簡単に構築 できます。 AIR 対応プラットフォームであれば、 共有ライブラリとして使いまわす事が できます。
ご清聴ありがとうございました。

2011年2月9日第130回FxUG勉強会@東京第一打者空振り三振