▼ActionScript 3.0メモ▼
SQLiteデータベースの利用


SQLiteデータベースの利用を行うプログラムを作成する。


ソースコード
SQLiteEx.as
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;            
            }
        }        
    }
}


−戻る−