プログラミングノート

一からものを作ることが好きなエンジニアの開発ブログです。

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; 
..


ちょっとしたデータを保存する程度であればこれで十分でしょう。