
こんにちは、Flash、Flex、AIRの(そしてそれだけではない)鑑定家。
今日は、AIRアプリケーションでローカルデータベース(SQLite)を操作する方法を説明します。
仕事には、Flex Builder、何らかのSQLiteエディター(FireFox SQLite Managerのアプリケーションを使用しています)、および少しの忍耐が必要です。
AIRには独自の機能がないため、データベースファイルの変更を表示するためのエディターが必要です。
計画を実装するには、次のライブラリが必要です。
import flash.data.SQLConnection; // () import flash.data.SQLStatement; // import flash.data.SQLResult; // import flash.data.SQLMode; // , , (, ) import flash.events.SQLErrorEvent; // import flash.events.SQLEvent; // (OPEN, UPDATE ..) import flash.filesystem. File ; // * This source code was highlighted with Source Code Highlighter .
import flash.data.SQLConnection; // () import flash.data.SQLStatement; // import flash.data.SQLResult; // import flash.data.SQLMode; // , , (, ) import flash.events.SQLErrorEvent; // import flash.events.SQLEvent; // (OPEN, UPDATE ..) import flash.filesystem. File ; // * This source code was highlighted with Source Code Highlighter .
import flash.data.SQLConnection; // () import flash.data.SQLStatement; // import flash.data.SQLResult; // import flash.data.SQLMode; // , , (, ) import flash.events.SQLErrorEvent; // import flash.events.SQLEvent; // (OPEN, UPDATE ..) import flash.filesystem. File ; // * This source code was highlighted with Source Code Highlighter .
import flash.data.SQLConnection; // () import flash.data.SQLStatement; // import flash.data.SQLResult; // import flash.data.SQLMode; // , , (, ) import flash.events.SQLErrorEvent; // import flash.events.SQLEvent; // (OPEN, UPDATE ..) import flash.filesystem. File ; // * This source code was highlighted with Source Code Highlighter .
import flash.data.SQLConnection; // () import flash.data.SQLStatement; // import flash.data.SQLResult; // import flash.data.SQLMode; // , , (, ) import flash.events.SQLErrorEvent; // import flash.events.SQLEvent; // (OPEN, UPDATE ..) import flash.filesystem. File ; // * This source code was highlighted with Source Code Highlighter .
import flash.data.SQLConnection; // () import flash.data.SQLStatement; // import flash.data.SQLResult; // import flash.data.SQLMode; // , , (, ) import flash.events.SQLErrorEvent; // import flash.events.SQLEvent; // (OPEN, UPDATE ..) import flash.filesystem. File ; // * This source code was highlighted with Source Code Highlighter .
import flash.data.SQLConnection; // () import flash.data.SQLStatement; // import flash.data.SQLResult; // import flash.data.SQLMode; // , , (, ) import flash.events.SQLErrorEvent; // import flash.events.SQLEvent; // (OPEN, UPDATE ..) import flash.filesystem. File ; // * This source code was highlighted with Source Code Highlighter .
import flash.data.SQLConnection; // () import flash.data.SQLStatement; // import flash.data.SQLResult; // import flash.data.SQLMode; // , , (, ) import flash.events.SQLErrorEvent; // import flash.events.SQLEvent; // (OPEN, UPDATE ..) import flash.filesystem. File ; // * This source code was highlighted with Source Code Highlighter .
import flash.data.SQLConnection; // () import flash.data.SQLStatement; // import flash.data.SQLResult; // import flash.data.SQLMode; // , , (, ) import flash.events.SQLErrorEvent; // import flash.events.SQLEvent; // (OPEN, UPDATE ..) import flash.filesystem. File ; // * This source code was highlighted with Source Code Highlighter .
他のデータベース環境と同様に、SQLite AIRは独自のファイルを作成することも、既製のデータベースファイルを使用することもできます。
データベースファイルを最初から作成するオプションを検討してください。
まず、データベースファイル自体(testDB.sqlite)を作成する必要があります。このために、次の構成を使用します。
- var dbFile: File = File .desktopDirectory.resolvePath( "testDB.sqlite" ); //データベースファイルへのパスを指定します(この場合、これはデスクトップです)
- var DBConnection:SQLConnection = new SQLConnection(); //データベースに接続します
- DBConnection.addEventListener(SQLErrorEvent.ERROR、DBError); //接続時に発生するイベントのハンドラーを追加します
- DBConnection.addEventListener(SQLEvent.OPEN、DBOpen); //成功した接続のイベントハンドラーを追加します
- DBConnection.open(dbFile); //データベースのオープンを実際に初期化します
- / **
- *この関数は接続エラーを処理します
- * /
- プライベート関数DBError(e:SQLErrorEvent): void
- {
- trace( "エラーメッセージ:" 、e.error.message);
- trace( "Details:" 、e.error.details);
- }
- / **
- *この関数は、成功した接続を処理します。
- * /
- プライベート関数DBOpen(e:SQLEvent): void
- {
- trace( "データベースは正常に作成されました" );
- }
*このソースコードは、 ソースコードハイライターで強調表示されました。
データベースファイルは既にありますが、テーブルで埋めるだけです。 テーブルの作成は、データベース(DBOpen)の正常な作成のイベントに結び付けることができます。 次に、そうしますが、今はデータベースが何を構成するかを理解します(誕生日を保存するデータベースの例を使用します)。 2つのテーブルで構成されます。
1.グループ-たとえば、人を含むグループ 「友達」、「仕事」、「家族」。 テーブルには2つのフィールド(id、name)があります。
2.実際にフィールド(id、lname、fname、ffname、date、group_id)を持つ人々
次に、上記のテーブルを作成します。これには、データベースへのクエリを含む変数が必要です。
- var GroupsTable: String = "CREATE TABLE IF NOT EXISTSグループ(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL、name TEXT)" ;
*このソースコードは、 ソースコードハイライターで強調表示されました。
クエリを管理するためのオブジェクト(このコードはDBOpen関数に挿入できます):
- varステートメント:SQLStatement = new SQLStatement(); //オブジェクトを作成します
- statement.sqlConnection = DBConnection; //リクエストを実行するベースを指定します
- statement.text = GroupsTable; //リクエストテキストを指定します
- statement.addEventListener(SQLErrorEvent.ERROR、DBError); //接続時に発生するイベントのハンドラーを追加します
- statement.addEventListener(SQLEvent.RESULT、TableResult); //テーブルが正常に作成されたときに発生するイベントのハンドラーを追加します
- statement.execute(); //リクエスト処理を初期化します
- / **
- *この関数は、成功したテーブル作成を処理します。
- * /
- プライベート関数TableResult(e:SQLEvent): void
- {
- トレース( 「テーブル作成」 );
- }
*このソースコードは、 ソースコードハイライターで強調表示されました。
類推して、2番目のテーブルを作成します。
- var PeoplesTable: String = "CREATE TABLE peoples(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL、lname TEXT、fname TEXT、ffname TEXT、date TEXT、group_id INTEGER)" ;
- varステートメント:SQLStatement = new SQLStatement(); //オブジェクトを作成します
- statement.sqlConnection = DBConnection; //リクエストを実行するベースを指定します
- statement.text = PeoplesTable; //リクエストテキストを指定します
- statement.addEventListener(SQLErrorEvent.ERROR、DBError); //接続時に発生するイベントのハンドラーを追加します
- statement.addEventListener(SQLEvent.RESULT、TableResult); //テーブルが正常に作成されたときに発生するイベントのハンドラーを追加します
- statement.execute(); //リクエスト処理を初期化します
*このソースコードは、 ソースコードハイライターで強調表示されました。
管理されています。 テーブルを含むデータベースが作成され、動作する準備ができました。 データを入力し、それを抽出する方法を学習するだけです。
テーブルに情報を追加する例を考えてみましょう。
- var InsertIntoPeoples: String = "INSERT INTO peoples(lname、fname、ffname、date、group_id)VALUES(@ column0、@ column1、@ column2、@ column3、@ column4)" ;
- var LNameArray:Array = [ "Ivanov" 、 "Sidorov" 、 "Kozlov" 、 "Ignatenko" 、 "Borshchev" 、 "Kolchenko" 、 "Buzyakin" ];
- var FNameArray:Array = [ "Ivan" 、 "Nikolai" 、 "Artem" 、 "Igor" 、 "Sergey" 、 "Boris" 、 "Alexey" ];
- var FFNameArray:Array = [ "Alekseevich" 、 "Borisovich" 、 "Igorevich" 、 "Artemovich" 、 "Nikolaevich" 、 "Ivanovich" 、 "Sergeevich" ];
- var statement2:SQLStatement = new SQLStatement();
- statement2.sqlConnection = DBConnection;
- statement2.text = InsertIntoPeoples;
- statement2.addEventListener(SQLErrorEvent.ERROR、DBError);
- statement2.addEventListener(SQLEvent.RESULT、InsertResult);
- for ( var j:数値= 0; j <100; j ++)
- {
- statement2.parameters [ "@ column0" ] = LNameArray [ Math .round( Math .random()* 6)];
- statement2.parameters [ "@ column1" ] = FNameArray [ Math .round( Math .random()* 6)];
- statement2.parameters [ "@ column2" ] = FFNameArray [ Math .round( Math .random()* 6)];
- statement2.parameters [ "@ column3" ] =( Math .round( Math .random()* 30)+ 1)+ ':' +( Math .round( Math .random()* 11)+ 1)+ ': ' +( Math .round( Math .random()* 2009)+ 1);
- statement2.parameters [ "@ column4" ] = Math .round( Math .random()* 3);
- statement2.execute();
- }
- / **
- *この関数は、テーブルへのデータの正常な追加を処理します。
- * /
- プライベート関数InsertResult(e:SQLEvent): void
- {
- トレース( 「テーブルに正常に追加」 );
- }
*このソースコードは、 ソースコードハイライターで強調表示されました。
この例では、ループを使用したデータの追加を簡素化するために、INSERT構文で「@ column0」参照が使用されています。 これは、各追加の前に再定義する必要がある変数を含む文字列を使用するよりもはるかに便利です。
次に、テーブルからデータを抽出してみましょう。
- var q: String = "SELECT * FROM groups ORDER BY name" ;
- var getGroupStat:SQLStatement = new SQLStatement();
- getGroupStat.sqlConnection = DBConnection;
- getGroupStat.text = q;
- getGroupStat.addEventListener(SQLErrorEvent.ERROR、DBError);
- getGroupStat.addEventListener(SQLEvent.RESULT、GetGroupResult);
- getGroupStat.execute();
- / **
- * GetGroup()関数の結果を処理します。
- * /
- プライベート関数GetGroupResult(e:SQLEvent): void
- {
- var result:SQLResult = e.target.getResult();
- var GroupArray:ArrayCollection = new ArrayCollection();
- if (result.data)
- for ( var i:Number = 0; i <result.data.length; i ++)
- GroupArray.addItem(result.data [i]);
- }
*このソースコードは、 ソースコードハイライターで強調表示されました。
GetGroupResult()関数では、結果変数にSELECTクエリの結果が割り当てられます;これはObject型の変数の配列です:
- [[ オブジェクトオブジェクト]、[ オブジェクトオブジェクト]、[ オブジェクトオブジェクト]、[ オブジェクトオブジェクト]]
*このソースコードは、 ソースコードハイライターで強調表示されました。
名前(GroupArray [i] .name)でデータに簡単にアクセスできるように、ArrayCollection型の変数を割り当てることで使用するのが最適です。
データを削除および更新するために、調査したものに類似した構造は、データベースへの文字列クエリのみを使用します。
レッスンの最後に、AIRアプリケーションが何らかの種類のデータストレージを使用する場合、SQLiteファイルを見つけないほうがよいのは、TXTファイルやXMLよりもはるかに高速であるためです。
ソースをレッスンに添付しています(Flex Builder 3.2のプロジェクト)。
PS誰かがAS3の良いコードのハイライトを教えてもらえますか?Quickhighlighter.comプロンプト 、
kutuに感謝