AIR:SQLiteのDBの読み書き
前回はテキストファイルの読み書きをやったので、今回は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データの持つ情報の種類が増えたり件数が増えてくると便利です。