前回はテキストファイルの読み書きをやったので、今回はDBを使ったデータ保存と
読み込みについてやります。サンプルは今回も自動保存メモ帳です。

SQLiteはMySQLのようなデータベースですので、SQL文を書いて操作しますが、
phpMyAdminなんかを使った事がある人なら特に問題ないと思います。経験な
いって方は「SQL 入門」なんかでぐぐってみてください。
とりあえず最初はテーブル作って、データ入れて、読み取って、更新あたり
ができれば問題ないでしょう。

今回はテキストデータを保存するので、まずデータを保存するテーブルを作成、
初期データ入れ込み、値の更新、2回目からは値の読み取りまでやってみます。

まずは保存するテーブル作成。
使うクラスは接続するためのSQLConnectionとSQL実行のためのSQLStatementを
使います。

var sqlT:SQLStatement;
var sqlcon:SQLConnection;
sqlT = new SQLStatement();
sqlT.sqlConnection = sqlcon;
sqlT.text="CREATE TABLE IF NOT EXISTS txtdata ( id INTEGER , txt TEXT)";
sqlT.addEventListener(SQLEvent.RESULT, dbok);
sqlT.addEventListener(SQLErrorEvent.ERROR, dberror);
sqlT.execute();


SQLStatementのtextプロパティに文字列でSQL文書いて、イベント設定して、
execute()で実行。
今回はidとtxtという2つの値を保存できるテーブルを作りました。
IF NOT EXISTSは既にあったら作らないという意味です。

次はデータを取り出します。

sqlT.text = "SELECT id, txt FROM txtdata WHERE id=1";
sqlT.addEventListener(SQLEvent.RESULT, readok);
sqlT.addEventListener(SQLErrorEvent.ERROR, readerror);
sqlT.execute();


WHEREで指定したidが1という条件にあったものを取り出します。
SQL実行すると結果がreadokという関数に返ってきますので、

var result:SQLResult = sqlT.getResult();
if (result.data == null) {
output.text = "まだないよ";
insdata();
} else {
output.text=result.data[0]["txt"];
}


結果を確認。初回はまだテーブル作っただけでデータを入れてないので、
id=1にマッチするデータは当然ありません。この場合、結果にnullが返っ
てきます。
ここでは、nullが返ってきた場合は初期データを入れる関数に移る、値が
あれば表示しています。

初期データを入れるinsdata()の中身は以下のようになります。

sqlT.text="INSERT INTO txtdata (id, txt) VALUES (1,'test')";
sqlT.addEventListener(SQLEvent.RESULT, insok);
sqlT.addEventListener(SQLErrorEvent.ERROR,inserror);
sqlT.execute();


さっき作ったtxtdataというテーブルに、値を入れます。
ここではidに1、txtにtestという文字列を入れています。2回目以降は
このtxtの値を読み取ります。

次は保存する場合の処理。

sqlT.text = "UPDATE txtdata SET txt = :tx WHERE id = :no";
sqlT.parameters[":no"] = 1;
sqlT.parameters[":tx"] = output.text;
sqlT.addEventListener(SQLEvent.RESULT, upok);
sqlT.addEventListener(SQLErrorEvent.ERROR, uperror);
sqlT.execute();


データの更新はUPDATE文で行います。ここではoutputというテキスト
フィールドの値を保存しています。
SQLはparametersというプロパティでも設定可能。使いまわす場合は
こっちが楽ですね。

あとよく使うものにDELETE文がありますが、お決まりのデータを保存
する場合は不要なので省きます。
このように1件のみの場合だと、DBを使う必要はサッパリないのですが、
1データの持つ情報の種類が増えたり件数が増えてくると便利です。

ソースとAIRファイル

HTML5飯