私は、Flash Builder 4.6 と Flex 4.6 を使用してモバイル フレックス アプリケーションに取り組んでいます。bin-debug フォルダーに SQlite db ファイルがあり、アプリケーションの起動時に ActionScript の applicationStorageDirectory にコピーします。
アプリの初期化イベントで呼び出されたデータベースをセットアップするスクリプトは次のとおりです。
/* Variables*/
private var file:File = File.applicationDirectory.resolvePath("db/myHealthBuddy.db");
private var local:File = File.applicationStorageDirectory.resolvePath("db/myHealthBuddy.db");
private var conn:SQLConnection;
private var model:Model = new Model();
/* db */
protected function dbInit():void
{
if(!local.exists)
{
local.createDirectory();
file.copyTo(local,true);
}
conn = new SQLConnection();
conn.addEventListener(SQLEvent.OPEN, openHandler);
conn.addEventListener(SQLErrorEvent.ERROR, errorHandler);
conn.openAsync(local);
}
private function openHandler(event:SQLEvent):void
{
trace("\ndb open");
conn.removeEventListener(SQLEvent.OPEN, openHandler);
// saving connection to Model valueObject
model.connection = conn;
// create tables if not already exists
var createTablesFile:File = File.applicationDirectory.resolvePath("db" + File.separator + "createtables.xml");
var stream:FileStream = new FileStream();
stream.open(createTablesFile, FileMode.READ);
var xml:XML = XML(stream.readUTFBytes(stream.bytesAvailable));
stream.close();
conn.begin(SQLTransactionLockType.IMMEDIATE);
for each (var statement:XML in xml.statement)
{
var stmt:SQLStatement = new SQLStatement();
stmt.sqlConnection = conn;
stmt.text = statement;
stmt.execute();
}
conn.commit();
navigator.firstViewData = model;
}
このコードは大丈夫ですか?
たとえば、データベースに変更を加える必要があります(新しいテーブルを追加し、既存のテーブルに列を追加します)。これらの変更をsqlite dbに加えると、それらは元に戻りますが、テーブル作成SQLを含むxmlファイルに残ります。