package {
import flash.data.*;
import flash.display.*;
import flash.events.*;
import flash.filesystem.*;
import flash.net.*;
import flash.text.*;
//SQLiteデータベースの利用
[SWF(width=240, height=240, backgroundColor=0xFFFFFF)]
public class SQLiteEx extends Sprite {
private static const
CREATE:int = 0,
INSERT:int = 1,
UPDATE:int = 2,
SELECT:int = 3;
private var base :Sprite; //ベース
private var textField:TextField;//テキストフィールド
private var btnWrite :TextField;//書き込みボタン
private var btnRead :TextField;//読み込みボタン
private var c :SQLConnection;//接続
private var stmt :SQLStatement; //ステートメント
private var sqlTag:int; //SQLタグ
//コンストラクタ
public function SQLiteEx() {
//ベースの追加
base = new Sprite();
base.graphics.beginFill(0xffffff);
base.graphics.drawRect(0, 0, 240, 240);
base.graphics.endFill();
addChild(base);
//テキストフィールドの追加
textField = addTextField(base, "" ,10 ,10);
//データベースとの接続
var file:File = File.applicationStorageDirectory.resolvePath(
"sample.db");
trace(file.nativePath);
c = new SQLConnection();
c.addEventListener(SQLEvent.OPEN, onOpen);
c.addEventListener(SQLErrorEvent.ERROR, onError);
c.open(file);
}
//データベース接続完了イベントの処理
private function onOpen(evt:SQLEvent):void {
//ボタンの追加
btnWrite = addButton(base, "書き込み", 10, 36);
btnRead = addButton(base, "読み込み", 70, 36);
}
//テキストフィールドの追加
private function addTextField(doc:DisplayObjectContainer,
text:String, x:int, y:int):TextField {
var textField:TextField = new TextField();
doc.addChild(textField);
textField.text = text;
textField.x = x;
textField.y = y;
textField.width = 200;
textField.height = 16;
textField.selectable = true;
textField.border = true;
textField.type = TextFieldType.INPUT;
return textField;
}
//ボタンの追加
private function addButton(doc:DisplayObjectContainer,
text:String, x:int, y:int):TextField {
var button:TextField = new TextField();
doc.addChild(button);
button.text = text;
button.x = x;
button.y = y;
button.autoSize = TextFieldAutoSize.LEFT;
button.selectable = false;
button.border = true;
button.background = true;
button.backgroundColor = 0xdddddd;
button.addEventListener(MouseEvent.CLICK, onClick);
return button;
}
//クリックイベントの処理
private function onClick(evt:MouseEvent):void {
//書き込み
if (evt.currentTarget == btnWrite) {
doSQL("create table if not exists test ("+
"id text primary key,"+
"info text)",
CREATE);
}
//読み込み
else if (evt.currentTarget == btnRead) {
doSQL("select info from test where id = '0'",
SELECT);
}
}
//SQL命令
private function doSQL(text:String, sqlTag:int):void {
this.sqlTag = sqlTag;
try {
stmt = new SQLStatement();
stmt.sqlConnection = c;
stmt.text = text;
stmt.addEventListener(SQLEvent.RESULT, onResult);
stmt.addEventListener(SQLErrorEvent.ERROR, onError);
stmt.execute();
} catch (e:Error) {
onError(new SQLErrorEvent(""));
}
}
//SQL命令結果イベントの処理
private function onResult(evt:SQLEvent):void {
if (sqlTag == CREATE) {
doSQL("insert into test (id, info)" +
"values ('0' , '" + textField.text + "')",
INSERT);
} else if (sqlTag == SELECT) {
var result:SQLResult = stmt.getResult();
for (var i:int = 0; i < result.data.length; i++) {
textField.text = result.data[i]["info"];
}
}
}
//エラーイベントの処理
private function onError(evt:SQLErrorEvent):void {
if (sqlTag == INSERT) {
doSQL("update test set info = '" + textField.text +
"' where id = '0'",
UPDATE);
} else {
textField.text = evt.error.message;
}
}
}
}
|