= 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でこの機能を使うことはできない、つまりシーケンスによる自動連番値の取得はできない。 この変更を施したものを次に添付する。 [[attachment: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") }}}