2.クライアント・データベース(SQLite)の利用
次はクライアント・データベース(SQL)の利用方法を紹介します。
前ページで述べたようにオフライン・アプリケーションは簡単に作成することができます。ただし、オンライン時にはサーバからデータを取得していたコードを、オフライン時にはローカルのクライアント・データベースからデータを取得するような仕組みをコーディングする必要があります。
クライアント・データベースを利用するには、CDKというオープンソースをダウンロードします。ダウンロードしたファイルを展開した後にdeploy/COM.CURL.CDK1.1/manifest.mcurlファイルへdelegate-toし、COM.CURL.CDK.SQLITEをimportします。これで準備完了です。
それではコーディングしていきましょう。まずは、SQLiteDatabaseクラスを用いてデータベースオブジェクトを生成します。引数で指定するURLはデータの格納されるファイルのパスとなります。もしURLがNULLの場合は、メモリデータベースとなります。メモリデータベースはアプレットのシャットダウン時にクリアされてしまいます。
def db = {SQLiteDatabase {url "test1.db"}}
次に上記で生成されたデータベースオブジェクトのexecuteメソッドを用いて更新系のSQL文を実行します。以下のサンプルコードではテーブルを作成し、テストデータを挿入しています。
{db.execute "CREATE TABLE IF NOT EXISTS test (col1 INTEGER, col2 TEXT)"} {db.execute "INSERT INTO test VALUES(1, 'test1')"} {db.execute "INSERT INTO test VALUES(2, 'test2')"}
データベースからデータを取得する場合には、sql-rowsメソッドを利用します。以下の例では、取得した行データをdumpマクロでコンソールに出力しています。
def rows = {db.sql-rows "SELECT * FROM test"} {for row in rows do {dump row[0], || col1 row[1] || col2 } }
これ以外にもクライアント・データベースは多くのAPIを持っています。例えばCurのデータモデルであるRecordSetと絡めたSQLを使わないアクセスや、独自関数の定義などがあります。詳細はCurl Developer Centerもしくはヘルプドキュメントを参照ください。
オンライン・オフラインの判断
オフライン・アプリケーションとクライアント・データベースAPIを組み合わせて利用するケースには、ローカルデータベースへのアクセスをし、オンライン時はサーバ側のデータへアクセスするというような処理が必要になります。オンラインもしくはオフラインかは、{network-disconnected?} プロシージャを利用して判断することができます。サンプルは以下の通りです。
{if {network-disconnected?} then || オフライン時の処理 else || オンライン時の処理 }
おわりに
以上、「オフライン・アプリケーションの開発」と「クライアント・データベース(SQLite)の利用方法について紹介しました。Curlのオフライン・アプリケーションについて興味がありましたら、ぜひ皆さんもお試しください。