▼Adobe AIRメモ▼
SQLiteデータベースの利用


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


ソースコード
SQLiteEx.as
package {
    import flash.data.*;
    import flash.display.*;
    import flash.events.*;
    import flash.filesystem.*;
    import flash.text.*;

    //SQLiteデータベースの利用
    public class SQLiteEx extends Sprite {
        private var tfLog:TextField;       //ログ
        private var tfLabel:TextField;     //ラベル
        private var tfName:TextField;      //名前
        private var tfBirth:TextField;     //誕生日
        private var tfBlood:TextField;     //血液型
        private var btnCreate:CustomButton;//CREATEボタン
        private var btnSelect:CustomButton;//SELECTボタン        
        private var btnInsert:CustomButton;//INSERTボタン        
        private var c:SQLConnection;       //接続
        private var stmt:SQLStatement;     //ステートメント
        
        //コンストラクタ
        public function SQLiteEx() {
            //ログの生成
            tfLog=makeTextField("SQLiteEx\n\n",
                5,5,630,420,TextFieldType.DYNAMIC,0xFFFFFF);
            addChild(tfLog);

            //ラベルの生成
            tfLabel=makeTextField("名前",
                5+160*0,430,60,20,TextFieldType.DYNAMIC,0xBBBBBB);
            addChild(tfLabel);
            tfLabel=makeTextField("誕生日",
                5+160*1,430,60,20,TextFieldType.DYNAMIC,0xBBBBBB);
            addChild(tfLabel);
            tfLabel=makeTextField("血液型",
                5+160*2,430,60,20,TextFieldType.DYNAMIC,0xBBBBBB);
            addChild(tfLabel);

            //テキストフィールドの生成
            tfName=makeTextField("こなた",
                65+160*0,430,100,20,TextFieldType.INPUT,0xFFFFFF);
            addChild(tfName);
            tfBirth=makeTextField("5月28日",
                65+160*1,430,100,20,TextFieldType.INPUT,0xFFFFFF);
            addChild(tfBirth);
            tfBlood=makeTextField("A",
                65+160*2,430,100,20,TextFieldType.INPUT,0xFFFFFF);
            addChild(tfBlood);

            //CREATEボタンの生成
            btnCreate=new CustomButton("CREATE");
            btnCreate.x=5;
            btnCreate.y=455;
            btnCreate.addEventListener(MouseEvent.CLICK,onCreateClick);
            addChild(btnCreate);
            
            //INSERTボタンの生成
            btnInsert=new CustomButton("INSERT");
            btnInsert.x=btnCreate.x+btnCreate.width+5;
            btnInsert.y=455;
            btnInsert.addEventListener(MouseEvent.CLICK,onInsertClick);
            addChild(btnInsert); 

            //SELECTボタンの生成
            btnSelect=new CustomButton("SELECT");
            btnSelect.x=btnInsert.x+btnInsert.width+5;
            btnSelect.y=455;
            btnSelect.addEventListener(MouseEvent.CLICK,onSelectClick);
            addChild(btnSelect); 

            //SQLコネクションによる接続
            var file:File=File.applicationStorageDirectory.resolvePath(
                "sample.db");
            tfLog.appendText(file.nativePath+"\n");
            c=new SQLConnection();
            c.addEventListener(SQLEvent.OPEN,onOpenResult);
            c.addEventListener(SQLErrorEvent.ERROR,onError);
            c.open(file);
        }

        //テキストフィールドの追加
        private function makeTextField(text:String,
            x:int,y:int,w:int,h:int,type:String,color:uint):TextField {
            var textField:TextField=new TextField();
            textField.text           =text;
            textField.x              =x;
            textField.y              =y;
            textField.width          =w;
            textField.height         =h;
            textField.selectable     =true;
            textField.background     =true;
            textField.backgroundColor=color;
            textField.type           =type;
            textField.multiline      =true;
            return textField;
        }

        //ボタンの生成
        private function makeButton(text:String,x:int,y:int):TextField {
            var button:TextField=new TextField();
            button.text           =text;                 
            button.x              =x;                 
            button.y              =y;                 
            button.width          =80;
            button.height         =20;
            button.selectable     =false;                 
            button.border         =true;               
            button.background     =true;         
            button.backgroundColor=0xdddddd;
            return button;
        }

        //SQLコネクション接続イベントの処理
        private function onOpenResult(evt:SQLEvent):void {
            tfLog.appendText("データベース接続完了\n");
        }        
        
        //CREATEボタンクリックイベントの処理
        private function onCreateClick(evt:Event):void {
            try {
                stmt=new SQLStatement();
                stmt.sqlConnection=c;
                stmt.text=
                    "CREATE TABLE IF NOT EXISTS people ("+
                    "    name TEXT PRIMARY KEY,"+
                    "    birth TEXT,"+
                    "    blood TEXT"+
                    ")";
                stmt.addEventListener(SQLEvent.RESULT,onCreateResult);
                stmt.addEventListener(SQLErrorEvent.ERROR,onError);
                tfLog.appendText(stmt.text+"\n");
                stmt.execute();
            } catch (e:Error) {
                tfLog.appendText(e.message+"\n");
            }
        }    

        //CREATE結果イベントの処理
        private function onCreateResult(evt:SQLEvent):void {
            tfLog.appendText("CREATE成功\n");
        }
        
        //INSERTボタンクリックイベントの処理
        private function onInsertClick(evt:Event):void {
            try {
                stmt=new SQLStatement();
                stmt.sqlConnection=c;
                stmt.text=
                    "INSERT INTO people (name, birth, blood)"+
                    "    VALUES ('"+tfName.text+"' , "+
                    "            '"+tfBirth.text+"',"+
                    "            '"+tfBlood.text+"')";
                stmt.addEventListener(SQLEvent.RESULT,onInsertResult);
                stmt.addEventListener(SQLErrorEvent.ERROR,onError);
                tfLog.appendText(stmt.text+"\n");
                stmt.execute();
            } catch (e:Error) {
                tfLog.appendText(e.message+"\n");
            }
        }

        //INSERT結果イベントの処理
        private function onInsertResult(evt:SQLEvent):void {
            tfLog.appendText("INSERT成功\n");
        }

        //SELECTイベントの処理
        private function onSelectClick(evt:Event):void {
            try {
                stmt=new SQLStatement();
                stmt.sqlConnection=c;
                stmt.text=
                    "SELECT name, birth, blood FROM people";
                stmt.addEventListener(SQLEvent.RESULT,onSelectResult);
                stmt.addEventListener(SQLErrorEvent.ERROR,onError);
                trace(stmt.text);
                stmt.execute();
            } catch (e:Error) {
                trace(e.toString());
            }
        }

        //SELECT結果イベントの処理
        private function onSelectResult(evt:SQLEvent):void {
            tfLog.appendText("SELECT成功\n");
            var text:String="";
            var result:SQLResult=stmt.getResult();
            var num:int=result.data.length;
            text+="----------\n";
            for (var i:int=0;i<num;i++) {
                text+=result.data[i]["name"]+"/"+
                    result.data[i]["birth"]+"/"+
                    result.data[i]["blood"]+"\n";
            }
            text+="----------\n";
            tfLog.appendText(text);
        }

        //エラーイベントの処理
        private function onError(evt:SQLErrorEvent):void {
            tfLog.appendText(evt.error.message+"\n");
        }
    }
}



CustomButton.as
package {
    import flash.display.*;
    import flash.filters.*;
    import flash.text.*;

    //カスタムボタン
    public class CustomButton extends SimpleButton {

        //コンストラクタ    
        public function CustomButton(label:String="",fontSize:uint=12) {
            //位置
            this.x=x;
            this.y=y;

            //ボタンスプライト
            var downSprite:Sprite=makeButtonSprite(
                label,fontSize,0x000000,0xdddddd);
            var upSprite  :Sprite=makeButtonSprite(
                label,fontSize,0xdddddd,0x000000);
            var hitSprite :Sprite=makeButtonSprite(
                label,fontSize,0x000000,0x000000);
          
            //状態            
            downState   =downSprite;//ダウン
            overState   =upSprite;  //オーバー
            upState     =upSprite;  //アップ
            hitTestState=hitSprite; //当たり判定

            //手アイコンを指定
            useHandCursor=true;
        }
        
        //ボタンスプライトの生成
        private function makeButtonSprite(text:String,fontSize:uint,
            highlightColor:uint,shadowColor:uint):Sprite {
            //スプライト
            var sp:Sprite=new Sprite();
            //ラベルの指定
            var label:TextField=makeLabel(text,fontSize);
            //描画
            sp.graphics.beginFill(0xdddddd);
            sp.graphics.drawRect(0,0,
                label.textWidth+6,label.textHeight+6);
            sp.graphics.endFill();
            sp.addChild(label);
            //フィルタの指定
            var filter:BevelFilter=new BevelFilter();
            filter.blurX=2;
            filter.blurY=2;
            filter.distance=1;
            filter.highlightColor=highlightColor;
            filter.shadowColor=shadowColor;
            var myFilters:Array=new Array();
            myFilters.push(filter);
            sp.filters=myFilters; 
            return sp;         
        }

        //ラベルの生成
        private function makeLabel(text:String,fontSize:uint):TextField {
            var i:uint;
            var label:TextField=new TextField();
            label.autoSize=TextFieldAutoSize.LEFT;
            label.selectable=false;
            var format:TextFormat=new TextFormat();
            format.font="_等幅";
            label.text="■";
            for (i=fontSize+10;i>=1;i--) {
                format.size=i;
                label.setTextFormat(format);
                if (label.textWidth<=fontSize) break;
            }
            label.text=text;
            label.setTextFormat(format);
            label.x=3-(label.width -label.textWidth)/2;
            label.y=3-(label.height-label.textHeight)/2; 
            return label;
        } 
    }
}


−戻る−