クライアント・データベース操作(SQLite)
データ操作
作者 岡田 一志   
2008年4月01日(火曜日) 00:00

CurlではJava DB(Derby)やAIRのようなローカルデータベース機能をオープンソースであるCDK(Curl Data Kit)を利用して、利用することができます。CDKは内部的にはSQLiteを利用しています。

sqlite01.jpg

 

 

 

 

 

 

SQLiteの詳細については以下のサイトを参照ください。
http://www.sqlite.org/

準備

ローカルデータベースを利用するために、CDKを下記サイトからダウンロードし、Zipファイルを展開します。
http://sourceforge.net/projects/curl-cdk/

この中にSQLiteのライブラリも含まれておりますので、別途SQLiteをダウンロードする必要はありません。

基本的なSQLiteへのアクセス

まずは以下のようにmanifestを設定し、COM.CURL.CDK.SQLITEをimportします。(manifest.mcurlのパスは環境に合わせて変更してください。)

{curl 6.0 applet}
{applet manifest = "deploy/COM.CURL.CDK.0.8/manifest.mcurl"}
{import * from COM.CURL.CDK.SQLITE}

最初にSQLiteConnectionクラスを用いてデータベースコネクションを生成します。 この際指定するdatabase-urlはデータの格納されるファイルのパスとなります。 

let con:SQLiteConnection =
        {SQLiteConnection database-url = {url "test1.db"}}

次に上記で生成されたコネクションのexecuteメソッドを用いて更新系のSQL文を実行します。(creata table/drop table等のSQL文も実行可能)以下のサンプルコードではテーブルを作成し、テストデータを挿入しています。

{con.execute "drop table if exists TAB"}
{con.execute "drop table if exists test"}
{con.execute "create table test (col1 int, col2 varchar(100))"}
{con.execute "insert into test values(1, 'test1')"}
{con.execute "insert into test values(2, 'test2')"}

SQL文の記載されたファイルからそのSQL文を実行するために、以下のようなこともできます。

{db.execute {read-from {url "test.sql"}}}

次にデータベースからステートメントオブジェクトを生成し、データを取得します。以下のサンプルコードでは、SQLiteStatementクラスのstepメソッドでカーソルを移動し、get-column-valueで取得したデータをdumpマクロでコンソールに出力しています。

let db:SQLiteDatabase = con.database
    let stmt:SQLiteStatement =
        {db.create-statement "select * from test"}
    {while {stmt.step} != SQLiteStatus.DONE do
        {dump {stmt.get-column-value 1}}
    }

また、CDKではJDBCのPreparedStatementのような、ステートメントを事前に準備しておく利用方法も可能となっています。ステートメント作成時にプレース・ホルダとして「?」をセットします。これらのプレース・ホルダにバインドするにはbindメソッドを利用し、最後にstepでSQL文を実行します。

let stmt1:SQLiteStatement =
    {db.create-statement "insert into test values(?, ?)"}
{stmt1.bind 3, "test3"}
{stmt1.step}

最後にデータベースをクローズするために、closeメソッドを利用します。

レコードセットとの連携

テーブルとRecordSetと連携が容易に可能となっています。これにはコネクションオブジェクトに対してcreate-record-setメソッドを実行します。 

let rs:RecordSet =
        {con.create-record-set
            "main", || データベース名
            "test", || テーブルもしくはSQL文
            request-modifiable? = true || 変更可否
        }
    {RecordGrid
        record-source = rs
    }

ダウンロードしたCDKディレクトリの中には、多くのコードサンプルが記載されていますので、詳細についてはそちらをご覧ください。

サポートバージョン

RTE6.0以上


 

最終更新 ( 2008年4月08日(火曜日) 11:45 )
 
Copyright 2008 - Sumisho Computer Systems Corporation. All rights reserved.    免責事項   プライバシーポリシー