SQLiteデータベースにカラムを追加する

以前 “SQLiteデータベースのバージョンを変更する“という記事を書いたが、結局実機でもうまく動作しなかった(Safari ブラウザやシミュレータと同じ結果だった)ので、データベースのバージョンによる管理を諦めて単純にカラムを追加することにした。

try {
 if (window.openDatabase) {
  db = openDatabase("BackgammonPositionsDB", "1.0", "Backgammon Positions DB", 200000); /* 現行バージョンのまま */
  if (!db) {
   alert("Failed to open the database on disk.");
   /* 初期化 */
  } else {
   db.transaction(function (tx) { /* 新しいカラムがなければ追加する */
    tx.executeSql("SELECT crawford, star FROM BGPositions;", [],
     function(tx, result) { },
     function(tx, error) {
      tx.executeSql("ALTER TABLE BGPositions ADD COLUMN crawford INTEGER default 0; VACUUM;");
      tx.executeSql("ALTER TABLE BGPositions ADD COLUMN star INTEGER default 0; VACUUM;");
    });
   });
   /* 全行読み込み */
   return;
  }
 } else {
 alert("Couldn't open or support the database. Please try to contact with author.");
  /* 初期化 */
 }
} catch(e) {
 /* former changeVerion.js (前回はここにバージョンを変える関数をいれていた) */
}

Webkit のバグが解消されない限りはこの方法が良いと思う。

さてこのコードを埋めたアップデートファイルが、驚愕のわずか12時間程度で承認され公開(Backgammon Position Cards for iPhone, iPod touch, and iPad on the …)されている。また以前の投稿 “iPhone アプリのアップデートで課金する” で話していた様に価格も元の Tier5 に戻した。

更新(2010年5月11日): 一年間十分食べさせて頂いたのと世界的な不況ということを考慮してTier4に値下げした。:-)

投稿者: hkitago

個人事業主でウェブと iOS, Android アプリの開発者で一児の父親。JavaScript, ActionScript, AppleScript, PHP, SQL, ObjC, Swift, Java の読書実行試験運用管理を生業とし、Bind, Postfix, Apache を MacOS で使い、エディタは Vi, mi, Kod, Smultron, TextWrangler を経て Coda, Xcode, Android Studio, Atom といった IDE と CotEditor を重用しています。座右の銘は「アウトプットは量多い方がいい。フィルタは各自がやればいい。」です。