AnormでFirebirdにアクセス
ここでは、Anorm/Jaybird経由でFirebirdデータベースにアクセスする。
FBDriverNotCapableException
普通にAnormを使おうとすると、この例外が発生する。原因は、めったに使用されないJDBCの機能をAnormが使用しており、jaybirdではその機能を実現しておらず、この例外を発生させているからである。
具体的には、playのAnorm.scalaソース中に
val s =connection.prepareStatement(sql.query,java.sql.Statement.RETURN_GENERATED_KEYS)
という一文があるが、jaybirdのFBConnection.javaのソースでは
public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException { throw new FBDriverNotCapableException(); }
としている。とりあえずここを
public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException { return prepareStatement(sql); }
と変更すればよい。もちろん、変更したところでjaybirdでこの機能を使うことはできない、つまりシーケンスによる自動連番値の取得はできない。
この変更を施したものを次に添付する。 jaybird-full-2.1.6-ex.jar
準備
jaybirdの準備
libディレクトリに上記の改造をほどこしたjaybird*.jarをコピーする。
application.confの設定
application.confに、例えば以下のように記述する(windowsの場合)
db.url=jdbc:firebirdsql:localhost:C:\\somedir\\somedb.fdb db.driver=org.firebirdsql.jdbc.FBDriver db.user=sysdba db.pass=masterkey
※複数のdbを扱う方法は今のところ不明。
アクセス
あとは普通にAnormを使うことができる。
val count = SQL("Select count(*) as c from some_table").apply().head[Long]("c")