SQLiteを使う(同期編)
AirではSQLiteが組み込まれているので簡単にDBを利用できます。ということでJavaScriptから使ってみました。全般的にシンプルで理解しやすいです。
DB接続
接続時で気になるのがファイルの保存場所ですが、Windows XPでは下記フォルダに指定したファイル名で保存されます(AIR の app-storage:/ はどこに保存される? by てっく煮ブログ)。
保存場所
C:\Documents and Settings\username\Application Data\appId\Local Store
DBファイルを利用しない場合は、conn.open(null); とするとメモリ上で展開されます。
var conn = null; function connect(){ conn = new air.SQLConnection(); try{ var file = air.File.applicationStorageDirectory.resolvePath("DB.db"); conn.open(file); }catch(error){ air.trace(error.message+'\n'+error.details); return false; } return true; }
SQL実行
そのまんま、渡されたSQLを実行しているだけです。
var stmt = null; function execStmt(sql){ stmt = new air.SQLStatement(); stmt.sqlConnection = conn; stmt.text = sql; try{ stmt.execute(); }catch(error){ air.trace(error.message+'\n'+error.details); return false; } return true; }
実行結果取得
実行結果はSQLを実行したオブジェクトに対して、getResult()で取得できます。ここでは結果に含まれるデータをカラム名を含めて表示しています。
function dumpData(){ var result = stmt.getResult(); var numRows = result.data.length; for(i=0; i<numRows; i++){ var output = ""; for(columnName in result.data[i]){ output += columnName + ": " + result.data[i][columnName] + "; "; } air.trace("row[" + i.toString() + "]\t", output); } }
テスト
上記のテストコードです。何回か実行すると下記のように出力されます。データの確認はSQLite Managerがお手軽で使いやすいかなと。
window.onload = function(){ var create = ""; create += "CREATE TABLE IF NOT EXISTS test ("; create += " id INTEGER PRIMARY KEY AUTOINCREMENT,"; create += " name TEXT"; create += ")"; var insert = "INSERT INTO test (name) VALUES ('ntaku')"; var select = "SELECT * FROM test"; if(!connect()) return; if(!execStmt(create)) return; if(!execStmt(insert)) return; if(execStmt(select)) dumpData(); }
row[0] id: 1; name: ntaku; row[1] id: 2; name: ntaku; row[2] id: 3; name: ntaku; ..
ちょっとしたデータを保存する程度であればこれで十分でしょう。