Apollo改めAIRプログラミング入門(2)

AIRとSQLiteで学ぶ ローカルDB操作の基本

クラスメソッド
杉浦篤史
2007/8/17


「CREATE」文でテーブル作成

 DBとの接続に成功したら、SQLEvent.OPENイベントが送出されるので、次の処理を行います。

 新しく作った場合は、空のDBファイルが作成されるので、CREATE TABLE文でデータを入れるためのテーブルを定義します。

 ActionScriptからDBに対してSQLを実行するには、下記のようにSQLStatementクラスを使用します。

private var stmt:SQLStatement;
//CREATE処理
private function createTable():void {
    stmt = new SQLStatement();
    stmt.sqlConnection = connection;
    stmt.text=
        "CREATE TABLE IF NOT EXISTS player ("+
        " no INTEGER PRIMARY KEY,"+
        " id TEXT,"+
        " mail TEXT,"+
        " sex TEXT,"+
        " home TEXT"+
    ")";

    stmt.addEventListener(SQLEvent.RESULT, stmtCreateResult);
    stmt.addEventListener(SQLErrorEvent.ERROR,stmtErrorHandler);

    stmt.execute();
}

 では、1行ずつ見ていきましょう。

    stmt.sqlConnection = connection;

 sqlConnectionプロパティに、接続先となるSQLConnectionを設定します。

    stmt.text=
        "CREATE TABLE IF NOT EXISTS player ("+
        " no INTEGER PRIMARY KEY,"+
        " id TEXT,"+
        " mail TEXT,"+
        " sex TEXT,"+
        " home TEXT"+
    ")";

 後は、textプロパティにSQL文を記述します。ここでは、noという連番フィールドを持つテーブルを作成します。

    stmt.execute();

 execute()でtextのSQLが実行されます。

 このように、DBへの操作はSQLStatementクラスを使用して行うわけですが、上記のように、その手順はとても簡単で、SQLStatementに対し接続先を指定したらSQL文を記述し、それを実行するだけです。これがActionScriptでのSQL操作の基本となります。

表2 SQLStatementクラスのプロパティとメソッド(一部)
プロパティ/メソッド名 説明
sqlConnection 操作を実行するDB接続を指定
text 実行するSQL文を記述
execute() SQLを実行

 ここからは、INSERT/SELECT/DELETE/UPDATEを行うサンプルを示します。

「INSERT」文でテーブルにデータを挿入

 テーブルが作成されたらデータを入れていきましょう。画面2のような簡単なフォームを作成し、ボタンを押下したらDBへデータを追加するようにします。

画面2 データ入力フォーム
画面2 データ入力フォーム

 このフォームのソースコードは以下のとおりです。

<mx:VBox verticalGap="0">
    <mx:Canvas width="100%">
        <mx:Label text="ID" x="{idTextInput.x}" />
        <mx:Label text="メールアドレス" x="{mailTextInput.x}" />
        <mx:Label text="性別" x="{sexComboBox.x}" />
        <mx:Label text="出身地" x="{homeComboBox.x}" />
    </mx:Canvas>

    <mx:HBox width="100%">
        <mx:TextInput id="idTextInput" width="80" />
        <mx:TextInput id="mailTextInput" />
        <mx:ComboBox id="sexComboBox" dataProvider="{sexComboData}" />
        <mx:ComboBox id="homeComboBox" dataProvider="{homeComboData}"
                     rowCount="10" />
    </mx:HBox>
</mx:VBox>

<mx:HBox>
    <mx:Button id="insertBtn" label="挿入"
         click="insertBtnClickHandler(event)" />
</mx:HBox>

 挿入ボタンが押下されたら、コンポーネントの値をSQL文に含める下記SQL文を実行します。これで、テーブルにコンポーネントに入力した値がデータとして追加されていきます。

private function insertBtnClickHandler(event:Event):void {
    stmt = new SQLStatement();
    stmt.sqlConnection = connection;
    stmt.text=
        "INSERT INTO player (no, id, mail, sex, home)"+
        " VALUES (Null," +
        "'"+ idTextInput.text +"',"+
        "'"+ mailTextInput.text +"',"+
        "'"+ sexComboBox.value +"',"+
        "'"+ homeComboBox.value +"')";

    stmt.addEventListener(SQLEvent.RESULT, stmtInsertResult);
    stmt.addEventListener(SQLErrorEvent.ERROR,connectionErrorHandler);

    stmt.execute();
}

「SELECT」文でテーブルの参照・閲覧

 これでデータを追加できるようになったので、今度はそのテーブルの内容を閲覧できるようにしましょう。画面3のように、SQL文が実行されるたびにデータグリッドに現在の状態を反映するようにします。

画面3 DBの内容を取得し、データグリッドに表示
画面3 DBの内容を取得し、データグリッドに表示

 ソースコードは以下のとおりです。

<mx:DataGrid id="dg" width="100%" height="100%" dataProvider="{dp}">
  <mx:columns>
    <mx:DataGridColumn width="50" dataField="no" headerText="No" />
    <mx:DataGridColumn width="100" dataField="id" headerText="ID" />
    <mx:DataGridColumn dataField="mail" headerText="メールアドレス" />
    <mx:DataGridColumn width="50" dataField="sex" headerText="性別" />
    <mx:DataGridColumn width="100" dataField="home"
                       headerText="出身地" />
  </mx:columns>
</mx:DataGrid>

 DBからデータを取得するには、SELECT文を使い、目的のテーブルから必要なデータを参照します。下記のようにSQLを実行します。

//SELECT処理
private function getData():void {
    stmt = new SQLStatement();
    stmt.sqlConnection = connection;
    stmt.text = "SELECT no, id, mail, sex, home FROM user";

    stmt.addEventListener(SQLEvent.RESULT, getDataResult);
    stmt.addEventListener(SQLErrorEvent.ERROR, stmtErrorHandler);

    stmt.execute();
}

//SELECT処理結果
private function getDataResult(event:SQLEvent):void {
    status += " データグリッド更新";

    var result:SQLResult = stmt.getResult();

    if (result.data == null) return;

    dp = new ArrayCollection(result.data);
}

 データを取得するには、SQLを実行後にSQLStatementクラスのgetResult()メソッドを利用してSQLResultを取得します。

 SQLResultからはSQLの実行結果が取得でき、この場合、dataプロパティに目的のデータが配列になって格納されています。それをデータグリッドのdataProviderとして利用することでテーブル内のデータを表示します。

 これで、データがデータグリッドに表示されるようになり、データ挿入のたびにデータグリッドを更新して、現在の状態を表示します。

1-2-3

 INDEX
Apollo改めAIRプログラミング入門(2)
  Page1
いまさら聞けない、SQLiteとは?
AIRからローカルDBを使ってみよう
SQLiteのDBを作成して接続
Page2
「CREATE」文でテーブル作成
「INSERT」文でテーブルにデータを挿入
「SELECT」文でテーブルの参照・閲覧
  Page3
「UPDATE」文でデータを更新
「DELETE」文でデータの削除
AIRでのローカルDBの利用はとっても手軽で簡単!




HTML5 + UX フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日 月間