Databaseオブジェクトによるデータベース・アクセス (1/7)
作成:2012-04-23 09:03
更新:2012-04-23 09:03
更新:2012-04-23 09:03
■データベースの仕組みを理解しよう
本格的なデータ管理を行うアプリを作ろうと思ったら、何より「データベース」が使えなければいけません。iPhoneやAndroidには「SQLite」というデータベースプログラムが内蔵されており、これを使ってスマートフォンのデータ類は管理されています。
このデータベースは、PhoneGapからも利用することができます。PhoneGapには「Database」というオブジェクトが用意されており、これを利用することでデータベースアクセスが可能になります。ただし! そのためには、いろいろと覚えておかなければいけないことがあります。
まず、なによりも頭に入れておきたいのは「データベースアクセスは、SQLを使う」という点です。SQLというのは、リレーショナルデータベースで用いられているデータアクセス言語です。SQLiteでもこれが使われています。このSQLという言語を使って記述されたクエリーをデータベースに送信することで、必要な処理が実行されます。ですから、SQLがわからなければデータベースは使えない、ということになります。SQLを知らない人は、まず別途SQLの基本について勉強しておくとよいでしょう。
続いて理解しないといけないのは、「データベースアクセスの仕組み」についてです。データベースへのアクセスは、「このメソッドを呼び出せばデータが取り出せるよ」というような単純なものではありません。もっと複雑なのです。使用するオブジェクトごとに流れを整理しましょう。
・Databaseオブジェクト
PhoneGapに用意されているデータベースアクセス用のオブジェクトは「Database」というものです。メソッドを呼び出して、指定のデータベースにアクセスするためのDatabaseオブジェクトを取得します。
・SQLTransactionオブジェクト
Databaseで何かを実行させるには、まず「トランザクション」というものを用意します。これは、まぁ「データベースへのアクセスを安全に行うための仕組み」のようなものと考えてください。このトランザクションを管理するのが「SQLTransaction」というオブジェクトです。
このオブジェクトのメソッドを呼び出して、トランザクション処理を実行するのですが、この処理は「非同期」で実行されます。つまり、「実行するメソッドを呼び出しても、すぐには処理が完了しない」のですね。したがって、これは「処理が終わったら呼び出してね」というコールバック関数を設定しておき、続きの処理(トランザクションで実際に実行する内容)はその関数内に用意することになります。
・コールバック関数
トランザクションのコールバック関数内で実行するのは、SQLTransactionオブジェクトの「executeSql」というメソッドです。これが、データベースにSQLを送信して必要な処理を行わせるためのものです。これを実行して、ようやくデータベースにアクセスできる、というわけです。
このexecuteSqlは連続して実行することができます。複数の処理を実行するのに、毎回「Databaseを取得して……」とやる必要はありません。
――まずは、この「データベースアクセスの基本的な流れ」をしっかりと頭に入れておいてください。これをベースに、主なデータベースアクセスの具体的な処理について説明していきましょう。
※Web SQL Databaseの注意点
実をいえば、このデータベースアクセス機能は、PhoneGap独自のものというわけではないのです。これは「Web SQL Database」といって、HTML5の仕様としてブラウザが実装しているものなのです。
「HTML5の仕様なのか。なら安心だ」と思った人。それがそうでもないのです。このWeb SQL Databaseというものは、HTML5の仕様に一時は乗ったものの、現在では「HTML5で標準化するには不向きだ」と判断され、策定作業が中断されています。いずれはこの機能がHTML5から抹消される予定です。
なぜか?といえば、それは「SQLという言語に頼ったデータベース利用」に問題があると判断されたためでしょう。新たに仕様に追加されたのは、「Indexed Database」と呼ばれる、非SQLのデータベースなのです。HTML5でSQLはこれから使っちゃダメ!というのが基本的な方針のようです。
というわけですので、現時点では問題なく使えますが、この先のことを考えると、果たしてここで詳解する機能がどれぐらい使い続けられるか、正直いってわかりません。PhoneGapの今後の計画を見ると、PhoneGap 2.xにて「Indexed DB」という項目がありますので、間もなくIndexed DBは使えるようになるはずです。そうなったところで、次第にこちらへと移行する、とかんが得ておくとよいでしょう。
このデータベースは、PhoneGapからも利用することができます。PhoneGapには「Database」というオブジェクトが用意されており、これを利用することでデータベースアクセスが可能になります。ただし! そのためには、いろいろと覚えておかなければいけないことがあります。
まず、なによりも頭に入れておきたいのは「データベースアクセスは、SQLを使う」という点です。SQLというのは、リレーショナルデータベースで用いられているデータアクセス言語です。SQLiteでもこれが使われています。このSQLという言語を使って記述されたクエリーをデータベースに送信することで、必要な処理が実行されます。ですから、SQLがわからなければデータベースは使えない、ということになります。SQLを知らない人は、まず別途SQLの基本について勉強しておくとよいでしょう。
■データベースアクセスの仕組み
続いて理解しないといけないのは、「データベースアクセスの仕組み」についてです。データベースへのアクセスは、「このメソッドを呼び出せばデータが取り出せるよ」というような単純なものではありません。もっと複雑なのです。使用するオブジェクトごとに流れを整理しましょう。
・Databaseオブジェクト
PhoneGapに用意されているデータベースアクセス用のオブジェクトは「Database」というものです。メソッドを呼び出して、指定のデータベースにアクセスするためのDatabaseオブジェクトを取得します。
・SQLTransactionオブジェクト
Databaseで何かを実行させるには、まず「トランザクション」というものを用意します。これは、まぁ「データベースへのアクセスを安全に行うための仕組み」のようなものと考えてください。このトランザクションを管理するのが「SQLTransaction」というオブジェクトです。
このオブジェクトのメソッドを呼び出して、トランザクション処理を実行するのですが、この処理は「非同期」で実行されます。つまり、「実行するメソッドを呼び出しても、すぐには処理が完了しない」のですね。したがって、これは「処理が終わったら呼び出してね」というコールバック関数を設定しておき、続きの処理(トランザクションで実際に実行する内容)はその関数内に用意することになります。
・コールバック関数
トランザクションのコールバック関数内で実行するのは、SQLTransactionオブジェクトの「executeSql」というメソッドです。これが、データベースにSQLを送信して必要な処理を行わせるためのものです。これを実行して、ようやくデータベースにアクセスできる、というわけです。
このexecuteSqlは連続して実行することができます。複数の処理を実行するのに、毎回「Databaseを取得して……」とやる必要はありません。
――まずは、この「データベースアクセスの基本的な流れ」をしっかりと頭に入れておいてください。これをベースに、主なデータベースアクセスの具体的な処理について説明していきましょう。
※Web SQL Databaseの注意点
実をいえば、このデータベースアクセス機能は、PhoneGap独自のものというわけではないのです。これは「Web SQL Database」といって、HTML5の仕様としてブラウザが実装しているものなのです。
「HTML5の仕様なのか。なら安心だ」と思った人。それがそうでもないのです。このWeb SQL Databaseというものは、HTML5の仕様に一時は乗ったものの、現在では「HTML5で標準化するには不向きだ」と判断され、策定作業が中断されています。いずれはこの機能がHTML5から抹消される予定です。
なぜか?といえば、それは「SQLという言語に頼ったデータベース利用」に問題があると判断されたためでしょう。新たに仕様に追加されたのは、「Indexed Database」と呼ばれる、非SQLのデータベースなのです。HTML5でSQLはこれから使っちゃダメ!というのが基本的な方針のようです。
というわけですので、現時点では問題なく使えますが、この先のことを考えると、果たしてここで詳解する機能がどれぐらい使い続けられるか、正直いってわかりません。PhoneGapの今後の計画を見ると、PhoneGap 2.xにて「Indexed DB」という項目がありますので、間もなくIndexed DBは使えるようになるはずです。そうなったところで、次第にこちらへと移行する、とかんが得ておくとよいでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
※関連コンテンツ
「PhoneGapによるAndroid/iPhoneアプリ開発入門」に戻る