Curlではデータベースサーバに接続し、RecordSetを生成することができる機能を持っています。これは、CDBC(Curl DataBase Connectivity)と呼ばれており、下図のようにJDBC経由でCurlからOracleやMySQLなどのサーバサイドデータベースに接続することができます。
この機能の操作方法を説明していきます。
事前準備
これを利用するには、以下のものが必要となります。
- Javaサーブレットエンジン:Tomcat or JBoss
- データベースサーバ:MySQL or Oracle
- JDBCドライバ
これらのセットアップ及びserver.xml等のセッティング方法は、以下のページを参照してください。
RecordSetの作成
まずは、CDBCを利用するために2つのパッケージをインポートします。
{import * from CURL.DATA-ACCESS.BASE} {import * from CURL.DATA-ACCESS.CONNECTED} |
次にデータベースに接続するために、Connectionクラスを継承したBasicConnectionクラスのインスタンスを生成します。この際、BasicConnectionのコンストラクタの引数にCDBCサーバのURLを渡します。
def conn:BasicConnection = |
単純にRecordSet(ここではConnectedRecordSetを継承したCDBC用クラスのBasicCeoonectedRecordSet)を生成するには、BasicConnectionのcreate-record-setメソッドを実行します。この引数には、データベース名とテーブル名(もしくはSQL文)を指定します。以下の例では、RecordGridに表示させています。
{RecordGrid |
SQL文の実行
SQL文を実行する際、create-record-setを用いて、select文よりRecordSetを取得できます。
{RecordGrid |
それ以外に、insert、update、delete、create、drop等のSQLを実行する際は、BasicConnection.executeメソッドを実行します。このメソッドは一度に複数のSQL文も実行することができます。
{conn.create-record-set “example”, “delete from employee“} |
直接SQL文を実行しなくても、BasicConnectedRecordSetのappend等のメソッドを用いたり、RecordGridの操作で、自動的にSQLを生成し、データの追加・更新・削除等を行いことができます。
データベースメタ情報の取得
いくつかのデータベース・メタ情報を取得するConnectionクラスのメソッドを以下に記載します。
メソッド名 | 説明 |
get-database-names | 操作できるデータベースの一覧を取得できます。 |
get-tables | 操作できるテーブル一覧を取得できます。 |
get-fields | 対象テーブルのカラム情報を取得できます。(カラム名、サイズ、キー、タイプ等) |
get-keys | キーの一覧を取得できます。 |
その他機能
Curl6.0からいくつかの機能(圧縮、非同期通信、認証、独自バイナリフォーマット通信など)が追加されました。それらの一部を紹介します。
大量データを扱う場合に、パフォーマンスを向上させるための方法として、2つサポートしています。1つはHTTP圧縮機能です。これを用いますとサーバとの通信時に自動的に圧縮・解凍され、トラフィックが低減されます。利用するには、BasicConnectionのインスタンス生成時にcompress?キーワード引数にtrueをセットします。
def conn:BasicConnection = |
もう一つのパフォーマンス向上機能として、通信フォーマットのシリアル化があります。通常CDBCはXMLで通信を行いますが、通信及びパースの高速化を行うため、Curl独自バイナリフォーマットのシリアル化・デシリアル化を自動的に行うという機能がサポートされました。これは通常のXMLと比べ5分の1から10分の1程度のスピードアップします。(ただし、データ量やデータ内容などによりスピードアップ率が変わる可能性があります。)これを利用するには、BasicConnectionのインスタンス生成時にserialize?キーワード引数にtrueをセットします。下位互換のためデフォルトはfalseとなっていますが、基本的にはこのパラメータをtrueにすることをお勧めします。
def conn:BasicConnection = |
その他の機能として、非同期通信及びrealmを利用した認証があります。どちらもBasicConnectionのインスタンス生成時にキーワード引数として指定します。非同期通信の場合には、async?、realm認証の場合にはusernameとpasswordを指定することにより、この機能を利用することができます。
また、JDBCで扱われるデータタイプのほとんどが、Curlのデータタイプに自動的にマッピングされますので、開発者は簡単にアプリケーションの開発を行うことができます。例えば、Curl6.0からサポートされた機能ですと、OracleのBLOBタイプをCurlのByteArrayにマッピングしてくれます。
関連ドキュメント