Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

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