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.2.2. アプリケーション開発
ここから.NETのコーディングとなる。以下では、.NET言語の詳細には立ち入らずに、Ultra Lightに関連する部分のみをコード例として示す。
3.2.2.1. 必要なライブラリ
次の2つのライブラリが必要となるので、Visual Studio 2005などに設定する。
- iAnwhere.Data.UltraLite.dll
- ulnet10.dll
- iAnwhere.Data.UltraLite.resources.dll
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では、テーブルのすべてのカラムが同期対象となり、カラムを絞って同期することはできない。これはSQL Anywhereと違う点で、SQL Anywhereではパブリケーションにてテーブルやそのカラムを同期対象として指定できる。