SHOEISHA iD

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

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

SQL Anywhereの魅力を探る

省リソースで軽快に動作する組込向けデータベース「Ultra Light」

SQL Anywhereの魅力を探る 6


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

3.2. Ultra Light アプリケーションの開発例

 では、実際にUltra Lightアプリケーションを開発してみよう。Ultra Lightアプリケーションを構築し、Mobile Linkサーバとの同期も試みる。

 ここではUltra Light .NET(.NET 2.0)を用いて、C#によるコード例を示す。Ultra Lightデータベースの扱いは言語によらずに共通だ。また、APIは同じように設計されているので、.NET以外の言語でUltra Lightを利用する場合でも参考になるはずだ。また、デスクトップアプリケーション(Windows XP)を例としているが、Windows CE(.NET Compact Framework 1.0/2.0)や.NET 1.0でも、Ultra Light部分に大きな変わりはない。

3.2.1. データベースの作成

 Sybase Centralを使って、Ultra Lightデータベースを作成する。SQL Anywhereでのデータベース作成と同様の操作感で、[Ultra Light 10]ツリーから操作する。Productテーブルを作成し、product_id(varchar型、データ長16バイト)、quantity(integer 型)の2つのカラムを作成する。データベースファイル名はsa10book-ulsample.udbとした。

図3.3. Sybase Centralからのデータベース作成
図3.3. Sybase Centralからのデータベース作成

3.2.2. アプリケーション開発

 ここから.NETのコーディングとなる。以下では、.NET言語の詳細には立ち入らずに、Ultra Lightに関連する部分のみをコード例として示す。

3.2.2.1. 必要なライブラリ

 次の2つのライブラリが必要となるので、Visual Studio 2005などに設定する。

  • iAnwhere.Data.UltraLite.dll
  •  
    iAnywhere.Data.UltraLite ADO.NETの名前空間を実装しているアセンブリである。GACに登録されているはずなので、[参照の追加]から登録できる。なお、実際のファイルは、 Windows用は%SQLANY10%\ultralite\UltraLite.NET\assembly以下に、Windows CE用は%SQLANY10%\ultralite\UltraLite.NET\ce\assembly以下にある。
     
  • ulnet10.dll
  •  
    ランタイムライブラリである。Windows用は%SQLANY10%\win32以下に、Windows CE用は%SQLANY10%\ultralite\UltraLite.NET\ce以下にある。プロジェクトのポップアップメニューから、[追加]-[既存の項目]を開き、ulnet10.dllを選択して、[リンクとして追加]する。これは、[追加]ボタンの矢印から選ぶ(追加ではない)。
     
    図3.4. Visual Studio 2005でのプロジェクト設定
    図3.4. Visual Studio 2005でのプロジェクト設定
注意:デプロイ方法
 デプロイ時には、上記ふたつのファイルの他に、次のファイルもインストールする。
  • iAnwhere.Data.UltraLite.resources.dll
  •  
    iAnywhere.Data.UltraLite ADO.NETの名前空間に必要なリソース。Windows用は%SQLANY10%\ultralite\UltraLite.NET\ assembly以下に、Windows CE用は%SQLANY10%\ultralite\UltraLite.NET\ce\assembly以下にある。
なお、実際のファイルサイズは、アプリが6KB、iAnwhere.Data.UltraLite.dllが226KB、 iAnwhere.Data.UltraLite.resources.dllが48KB、ulnet10.dllが798KB、合計1,078KBとなった。

3.2.2.2. データベースへの接続

 データベースへの接続は、ULConnectionクラスを用いる。接続パラメータはULConnectionParmsで指定する。

using iAnywhere.Data.UltraLite;

ULConnectionParms parms = new ULConnectionParms();
parms.DatabaseOnDesktop = "D:\\sa10book-ulsample.udb";
using (ULConnection conn = new ULConnection(parms.ToString()))
{
    conn.Open();
    // connを使う
    conn.Close();
}

 接続パラメータとして、DBファイルへのパスは必須である。必要に応じて、その他のパラメータも設定する。例えば、データベースのデフォルトキャッシュサイズは64KBであるので、それを変えたければ明示する。SQL Anywhereでは負荷に応じてキャッシュサイズを自動増減させる機能があるが、Ultra Lightではそのような機能はない。キャッシュサイズは最初に確保した量で固定されるので、あらかじめ必要量を見積もって、指定するようにする。

parms.CacheSize = "512k"

 DBファイルが暗号化されているのであれば、暗号化キーを指定する。

parms.EncryptionKey = "password_for_database_encryption";

 また、ユーザー(とパスワード)とを別途追加したのであれば、それを指定する

parms.UserID = "someone";
parms.Password = "password";

3.2.2.3. SQL文の処理:INSERT/UPDATE/DELETE

 SQL文はULCommandで指定して実行する。更新系の処理は次のようになる。

using (ULCommand cmd = conn.CreateCommand())
{
    cmd.CommandText =
        "INSERT INTO product(product_id, quantity) VALUES (?,?)";
    cmd.Parameters.Add("", "eggplant");
    cmd.Parameters.Add("", 50);
    cmd.ExecuteNonQuery();
}

3.2.2.4. SQL文の処理:SELECT

 結果セットが返るSQL文では、ULDataReaderオブジェクト経由でデータを取得する。

using (ULCommand cmd = conn.CreateCommand())
{
    cmd.CommandText = "SELECT product_id, quantity FROM product";
    using (ULDataReader reader = cmd.ExecuteReader())
    {
        int columns = reader.FieldCount;
        reader.MoveBeforeFirst();
        while (reader.MoveNext())
        {
            for (int i = 0; i < columns; i++)
            {
                System.Console.Write(reader.GetString(i) + " ");
            }
            System.Console.WriteLine();
        }
        reader.Close();
    }
}

 以上がSQL文を実行する一連の流れだ。ADO.NETそのものであるので、親しみやすいだろう。

3.2.2.5. Mobile Link同期

 Mobile Link同期を行うにはConnectionオブジェクトに対して同期クライアントの設定を行い、Connection#Synchronize()を実行する。

conn.SyncParms.Version = "default";
conn.SyncParms.StreamParms = "host=192.168.0.1";
conn.SyncParms.Stream = ULStreamType.TCPIP;
conn.SyncParms.UserName = "50";
conn.Synchronize()

 このようにUltra Lightの同期は、アプリケーションAPIから実行することができる。一方、SQL Anywhereの場合は、同期クライアントを外部プロセスで呼び出す必要があり、コーディングが多少煩雑になる。

注意:Ultra Lightでのパブリケーション
 Ultra Lightではデフォルトですべてのテーブルが同期対象となる。このため、Ultra Light内のテーブルをすべて同期したいなら、パブリケーションを作成する必要はない。逆に、一部のテーブルを同期対象としたいのなら、そのためのパブリケーションを作成し、パブリケーションを指定して同期する(注6)。
なお、Ultra Lightでは、テーブルのすべてのカラムが同期対象となり、カラムを絞って同期することはできない。これはSQL Anywhereと違う点で、SQL Anywhereではパブリケーションにてテーブルやそのカラムを同期対象として指定できる。
注6
 (SQL Anywhereにはない)Ultra Light固有の機能として、テーブル名が「nosync」で終わるものは自動的に同期対象から外されるというものがある。パブリケーションではなく、この機能を利用して、同期したくないテーブルを除外ようにしてもよい。

次のページ
3.3. その他

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

  • このエントリーをはてなブックマークに追加
SQL Anywhereの魅力を探る連載記事一覧

もっと読む

この記事の著者

森脇 大悟(モリワキ ダイゴ)

1974年生まれ。神奈川県川崎市出身。京都大学理学部物理学科卒業。同大学院 修士課程中退後、有限会社グルージェント(現・株式会社グルージェント)入社。SIとして金融や物流システムを手がける。2003年アイエニウェア・ソリューションズ株式会社入社。エンジニアとして製品の導入支援やコンサルティング業務に...

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1638 2008/09/04 12:51

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング