U⁄A LABO

RSS

SEARCH

AUTHOR

  • KNOCKKNOCK (10件)小遣い2万円のフラッシュデベロッパー。
    帰りが遅いのにキレる嫁をだましだまし制作中・・・。

  • TAKAIW (13件)フラッシュデベロッパー。遊びでゲームを作るのも好きです。外見に似合わないイラストを描くのも好きです。とにかく作るのが好きです。

  • CHIKATHREESIX (8件)メタル界のフラッシュデベロッパー。またある時はメタルギタリスト。オーサリング中もヘッドバンギングは絶やさない。

  • YANBOU (6件)犬と猫で、家が毎日運動会のフラッシュデベロッパー。
    ビールから発泡酒へ変更で節約中。

  • AKUZE (2件)2003年からユナイティアに寄生しているフラッシュデベロッパー。
    シルクドソレイユとカナダが好き。

  • DECO-DEKAI (1件)ビートダウンパートでご飯何杯も食べられます。
    ハードコア・テクニカルディレクターを目指して日々精進。

CATEGORY

HOME  >  AIRでSQLiteを使う -アドレスブック-

2009.05.28 YANBOU

AIRでSQLiteを使う -アドレスブック-

AIRでSQLiteが使えるということでテストしてみた。
ただテストするとつまらないのでデータベースを使ったアドレスブックを作った。

20090528_1.jpg

まずはデータベースとつないで、テーブル作成。
テーブルの「flag」はデリート時に変更し表示上から削除するため。
つまり後で復活できるようにしておく。

■データベースを作成するとき

private var _connection:SQLConnection;
private var _sqlstmt:SQLStatement;

var dbfile:File = File.applicationDirectory.resolvePath("data.db");
this._connection = new SQLConnection();
this._connection.addEventListener(SQLEvent.OPEN, connectOpen);
this._connection.addEventListener(SQLErrorEvent.ERROR, viewError);
this._connection.open(dbfile);

■テーブルを作成するとき

this._sqlstmt = new SQLStatement();
this._sqlstmt.sqlConnection = this._connection;
this._sqlstmt.text = "CREATE TABLE IF NOT EXISTS data (no INTEGER PRIMARY KEY, name TEXT, address TEXT, tel TEXT, email TEXT, flag INTEGER)";
this._sqlstmt.addEventListener(SQLEvent.RESULT, viewComp);
this._sqlstmt.addEventListener(SQLErrorEvent.ERROR, viewError);
this._sqlstmt.execute();

■追加するとき

this._sqlstmt.text = "INSERT INTO data (no, name, address, tel, email, flag) VALUES (@no, @name, @address, @tel, @email, @flag)";
this._sqlstmt.parameters["@no"] = null;
this._sqlstmt.parameters["@name"] = this.uname.text;
this._sqlstmt.parameters["@address"] = this.address.text;
this._sqlstmt.parameters["@tel"] = this.tel.text;
this._sqlstmt.parameters["@email"] = this.email.text;
this._sqlstmt.parameters["@flag"] = 1;
this._sqlstmt.addEventListener(SQLEvent.RESULT, viewComp);
this._sqlstmt.addEventListener(SQLErrorEvent.ERROR, viewError);

this._sqlstmt.execute();

■削除するとき
※デリートではなく「flag」のアップデートで対応。

this._sqlstmt.text = "UPDATE data SET flag = @flag WHERE no = @no";
this._sqlstmt.parameters["@no"] = dgData.no;
this._sqlstmt.parameters["@flag"] = 0;
this._sqlstmt.addEventListener(SQLEvent.RESULT, viewComp);
this._sqlstmt.addEventListener(SQLErrorEvent.ERROR, viewError);
this._sqlstmt.execute();

■更新するとき

this._sqlstmt.text = "UPDATE data SET name = @name, address = @address, tel = @tel, email = @email WHERE no = @no";
this._sqlstmt.parameters["@no"] = dgData.no;
this._sqlstmt.parameters["@name"] = dgData.name;
this._sqlstmt.parameters["@address"] = dgData.address;
this._sqlstmt.parameters["@tel"] = dgData.tel;
this._sqlstmt.parameters["@email"] = dgData.email;
this._sqlstmt.addEventListener(SQLEvent.RESULT, viewComp);
this._sqlstmt.addEventListener(SQLErrorEvent.ERROR, viewError);
this._sqlstmt.execute();

■表示するとき
※UIコンポーネントのデータグリッドを使用。
データは「flag」が0でないもので、名前の順で取り出している。

public var dg:DataGrid;

//データ取得
private function getParam(e:MouseEvent = null):void {
	this._sqlstmt = new SQLStatement();
	this._sqlstmt.sqlConnection = this._connection;
	this._sqlstmt.text = "SELECT * FROM data WHERE flag > 0 ORDER BY name DESC";
	this._sqlstmt.addEventListener(SQLEvent.RESULT, getComp);
	this._sqlstmt.addEventListener(SQLErrorEvent.ERROR, viewError);
	this._sqlstmt.execute();
}
//データ表示
private function getComp(e:SQLEvent):void {
	var result:SQLResult = this._sqlstmt.getResult();
	var records:Array = result.data;
	this.dg.editable = true;
	this.dg.columns = ["name", "address", "tel", "email"];
	this.dg.columns[0].sortable = false;
	this.dg.columns[1].sortable = false;
	this.dg.columns[2].sortable = false;
	this.dg.columns[3].sortable = false;
	var dp:DataProvider = new DataProvider(records);
	this.dg.dataProvider = dp;
}

AIRでSQLiteを使ってみて、簡単という印象だった。
データベースの確認はFirefoxのアドオン 「Sqlite Manager」を使えばさらに簡単。
できたアプリも公開。

CATEGORY