Locked History Actions

Play/AnormFirebird

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")