Symfoware

Symfowareについての考察blog

WindowsでFirebird embeddedにJava1.7 + Jaybirdから接続する

UbuntuでFirebirdのembeddedモードを試してみました。
Firebird embeddedにJava1.7 + Jaybird + Ubuntuで接続する

Windowsでも動作を確認してみます。

Java 1.7.0.51 + Jaybird 2.2.4で試してみます。
OSはWindows 7 32bitを使用しました。





ダウンロード



JDBCドライバであるJaybirdを以下のURLからダウンロードします。
http://www.firebirdsql.org/en/jdbc-driver/

352_01.png


「Jaybird-2.2.4JDK_1.7.zip」をダウンロードしました。


解凍したフォルダの中に「jaybird-full-2.2.4.jar」があるので、
これを取り出しておきます。


もうひとつ、「jaybird22.dll」も取り出しておきます。

OSに応じて、使用するファイルは異なります。

Windows 32bit:jaybird22.dll
Windows 64bit:jaybird22_x64.dll
Linux 32bit:libjaybird22.so
Linux 64bit:libjaybird22_x64.so




Firebird 32-bit Embeddedを以下のURLからダウンロードします。
http://www.firebirdsql.org/en/firebird-2-5-2-upd1/

352_02.png


今回はWindows 7 32bitで動かすので、
「Firebird-2.5.2.26540-0_Win32_embed.zip」をダウンロードしました。

解凍したフォルダの中から以下のファイルを取り出しておきます。

fbembed.dll
ib_util.dll
icudt30.dll
icuin30.dll
icuuc30.dll






サンプルプログラム



サンプルはUbuntuで試した時と同じです。


  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.ResultSet;
  4. import java.sql.Statement;
  5. public class Sample {
  6.     
  7.     public static void main(String... args) throws Exception {
  8.         String url = "jdbc:firebirdsql:embedded:C:\\Develop\\fbemb\\post.fdb?encoding=UTF8";
  9.         
  10.         try (Connection con = DriverManager.getConnection(url);
  11.                 Statement stmt = con.createStatement()) {
  12.             
  13.             // テーブル作成
  14.             stmt.execute("create table embedtest (id int, name varchar(100))");
  15.             
  16.             // データ登録
  17.             stmt.execute("insert into embedtest(id,name) values(1,'テストだよー')");
  18.             
  19.             // 登録したデータを検索
  20.             ResultSet rs = stmt.executeQuery("select * from embedtest");
  21.             while(rs.next()) {
  22.                 System.out.println(rs.getString("name"));
  23.             }
  24.         }
  25.     }
  26.     
  27. }




今回は統合開発環境がない端末で動作確認しているので、
手動でコンパイルしました。

上記の内容を「Sampl.java」というファイル名で保存しておきます。

ファイルを保存した階層に「lib」というフォルダを作成し、
・jaybird-full-2.2.4.jar
・jaybird22.dll
をコピーしました。


また「dll」というフォルダを作成し、
・fbembed.dll
・ib_util.dll
・icudt30.dll
・icuin30.dll
・icuuc30.dll
をコピーしました。


データベースファイルであるfdbファイルは、
FreeBSD 10.0 + Firebird 2.5.2 データベースファイルを作成する
こちらで作成したものをコピーして使いました。


ソースコードのあるフォルダの内容はこんな感じ。

352_03.png

build.batはコンパイル用のバッチファイルです。


libフォルダの内容はこちら。

352_04.png


dllフォルダの内容はこちら。

352_05.png


コンパイル用のバッチファイル「build.bat」はこんな感じです。


@echo off
javac -cp .;lib\jaybird-full-2.2.4.jar Sample.java




実行すると、Sample.classが出力されます。


プログラムを実行するためのバッチファイルの内容はこんな感じ。


@echo off
set PATH=%PATH%;C:\Develop\fbemb\dll
java -cp .;lib\jaybird-full-2.2.4.jar -Djava.library.path=C:\Develop\fbemb\lib\ Sample




環境変数PATHに、Firebird embeddedのdll一式を保存したパスを設定。
-Djava.library.pathで「jaybird22.dll」を保存したパスを指定します。

実行するとちゃんと登録したデータが表示されました。

352_06.png





実行時のエラーについて



実行時によく発生するエラーについてメモしておきます。

エラー1


Exception in thread "main" java.sql.SQLException: No suitable driver found for j
dbc:firebirdsql:embedded:C:\Develop\fbemb\post.fdb?encoding=UTF8
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at Sample.main(Sample.java:11)




これは「-cp .;lib\jaybird-full-2.2.4.jar」のように
クラスパスにjaybird-full-2.2.4.jarを指定するのを忘れている場合。



エラー2


Exception in thread "main" java.lang.UnsatisfiedLinkError: no jaybird22 in java.
library.path
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.loadLibrary0(Unknown Source)
        at java.lang.System.loadLibrary(Unknown Source)
        at org.firebirdsql.gds.impl.jni.JniGDSImpl.initJNIBridge(JniGDSImpl.java:64)
        at org.firebirdsql.gds.impl.jni.JniGDSImpl.<clinit>(JniGDSImpl.java:25)
        at org.firebirdsql.gds.impl.jni.EmbeddedGDSFactoryPlugin.getGDS(EmbeddedGDSFactoryPlugin.java:40)
        at org.firebirdsql.gds.impl.GDSFactory.getGDSForType(GDSFactory.java:275)
        at org.firebirdsql.jca.FBManagedConnectionFactory.getGDS(FBManagedConnectionFactory.java:114)
        at org.firebirdsql.jdbc.AbstractDriver.connect(AbstractDriver.java:120)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at Sample.main(Sample.java:11)

Exception in thread "main" java.sql.SQLException: No suitable driver found for j
dbc:firebirdsql:embedded:C:\Develop\fbemb\post.fdb?encoding=UTF8
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at Sample.main(Sample.java:11)




これは、「-Djava.library.path=」でjaybird22.dllを保存したパスを
指定するのを忘れた時に発生します。



エラー3


Exception in thread "main" java.lang.RuntimeException: Failed to initialize Jaybird native library.
This is most likely due to a failure to load the firebird client library.
        at org.firebirdsql.gds.impl.jni.JniGDSImpl.attemptToLoadAClientLibraryFromList(JniGDSImpl.java:106)
        at org.firebirdsql.gds.impl.jni.EmbeddedGDSImpl.<init>(EmbeddedGDSImpl.java:31)
        at org.firebirdsql.gds.impl.jni.EmbeddedGDSImpl.<init>(EmbeddedGDSImpl.java:21)
        at org.firebirdsql.gds.impl.jni.EmbeddedGDSFactoryPlugin.getGDS(EmbeddedGDSFactoryPlugin.java:40)
        at org.firebirdsql.gds.impl.GDSFactory.getGDSForType(GDSFactory.java:275)
        at org.firebirdsql.jca.FBManagedConnectionFactory.getGDS(FBManagedConnectionFactory.java:114)
        at org.firebirdsql.jdbc.AbstractDriver.connect(AbstractDriver.java:120)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at Sample.main(Sample.java:11)




これは、「SET PATH=」で、Firebirdのdllへのパスの通し忘れ。
もしくは、必要なFirebirdのdllが不足している時です。

fbembed.dllだけでなく、
・ib_util.dll
・icudt30.dll
・icuin30.dll
・icuuc30.dll
も存在している必要があります。

環境によっては、
・msvcp80.dll
・msvcr80.dll
・Microsoft.VC80.CRT.manifest
も必要かもしれません。





関連記事

テーマ:データベース - ジャンル:コンピュータ

  1. 2014/03/05(水) 22:07:19|
  2. Firebird
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Firebird embedded 2.5.2で接続した時のアクセス権メモ | ホーム | Firebird embeddedにJava1.7 + Jaybird + Ubuntuで接続する>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1313-b4c98a40
この記事にトラックバックする(FC2ブログユーザー)