SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

CurlデベロッパーセンターPick Up(PR)

Curlのオフライン機能とSQLiteを使って「停止しないシステム」を作る

  • このエントリーをはてなブックマークに追加

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のオフライン・アプリケーションについて興味がありましたら、ぜひ皆さんもお試しください。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
CurlデベロッパーセンターPick Up連載記事一覧

もっと読む

この記事の著者

岡田 一志(オカダ ヒトシ)

大企業向けSI開発、IT基盤設計/構築やiDC設立プロジェクトの企画/開発/運用など幅広く活躍し、2006年にCurlに参画する。米Curl社(マサチューセッツ)にてCurl Core RTEの設計・開発に従事した後、現在は株式会社カールにて、Innovation Centerのオペレーションおよび...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5027 2010/03/29 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング