「Safari @iPhoneでSQLiteデータベースが使えない」なんてことはないよね?

iPhone使いで自転車乗りなので、GPSログ機能を持つアプリを愛用しています。が、こいつがバッテリーを喰いまくる。おそらく、凄まじい頻度でGPS信号を受信しているのが原因だと思われます。

で、もっと緩い感じのGPSロガーを作ってみよう。Safari は JavaScript で位置情報を取得できるし、ローカルデータベースも使えるし。位置情報取得の時間間隔を空ければバッテリの保ちも良くなるんじゃないか。…と思って参考にしようとしたのがこのページ。

  → iPhoneがJavaScript+SQLiteでGPSレコーダーに!:ASCII.jp

ここに載っているサンプルは正しく動作しません。とりあえずローカルにデータベースを作成できない。

う〜ん、困ったな…と思っていると、同じ連載の別の記事にこんな記述を発見。

HTML5の仕様からWeb SQL Databaseが廃止されたためでしょうか、iOS 4.2ではJavaScriptからSQLiteへのアクセスができなくなりました。
 → iOS 4.2×localStorageで作るGPSレコーダー:ASCII.jp

マジか。ローカルストレージよりもデータベースのほうが使い勝手が良さそうなんだが…と更に調べてみたり、スクリプトを弄ったりしていると、あれ?

普通にSQLiteデータベース、使えるよね?

結局、データベースをオープン・新規作成するときに、関数 openDatabase() の第三・第四引数を null にしない(==明示的に指定してやる)と、何事もなくデータベースにアクセスできるようです。
たとえば、

var db = openDatabase( 'testDB' , '1.0' , 'test database' , 5000000 );

  • 第一引数:データベース名
  • 第二引数:データベースのバージョン
  • 第三引数:データベースの説明
  • 第四引数:データベースのサイズ(5000000バイト=5MBより小さい値を指定した時は5MBの領域が確保されるみたい)
これで、"testDB" が存在しなければ新規作成され、存在していればそれを開いて、変数 db にデータベースオブジェクトが返ってきます。

さて、無事にデータベースを作成できたので、次に進みましょう。先はまだまだ長そうだ。とりあえず秋の自転車シーズンが続いているうちに完成できれば良いのですが。

カテゴリ: