私もつい最近JDBCやってみました
- Java8(Java1.8)
- FileMaker Pro 18 Advanced
- FileMaker Pro 19
と思ったら、既に記事を書かれている方がいました。
私の場合はFileMakerServerは使わず、ローカルのFileMaker Proを立ち上げて、そこにJavaからlocalhost(127.0.0.1)で接続しました。
で、結果はというと、JDBCを直接使う場合は、ほぼ問題なし。
但し、MyBatisを使う場合には、色々問題が起こってしまいました。
com.filemaker.jdbc3.CommonJ3ResultSet.isClosed の例外発生
こちらに書かれているのと同じ症状。
また不便だなと思ったのは、上記に書かれているのと同じ
「日本語のテーブル名やカラム名は"で括る必要がありました。」
の症状です。
別の解決策があったので、ご紹介します。たまたま見つけました!
私が普段使っていたMyBatisは以下のバージョンです
- mybatis-3.5.3.jar
このバージョンを古くするのです。
- mybatis-3.4.6.jar
これで、isClosed問題は発生しなくなりました。
念のため、MyBatisのソースを見たのですが 3.4.6の頃は isClosedは
使っていませんでした。
最新ソースには isClosedが十数か所使ってありました。
どのバージョンのソースから、isClosedが使われるようになったのかは、まだ調べておりません
今のところの私の結論
- JDBCからアクセスする予定があるFileMakerのDBは表名も、カラム名も英字にする
- 英字であれば、MyBatis Generatorは問題ありませんでした。
- そして、mybatis-3.4.6.jar を使う
今のところの気に入らないところ
insert をしてみたのですがFileMakerの数字型がJavaではdoubleです。
double x = 4;
とかして、insertしたものをFileMakerで見ると
4.0 と見えてしまいます
insertした後の主キーの取り出し方
PreparedStatement ps;
を使ってinsert した後、
ResultSet rs = ps.getGeneratedKey();
を実行すると、どうも ROWIDが、帰ってくるようです。
ROWIDというのは、FileMakerの画面上は見えませんが、DBの裏で
1行毎につけられている連番のようなものです。
それを使って、もう一度 Selectを投げると、insertした時、自動発番された
主キー(UUID)がとりだせました
Select table01_pk From Table01 Where ROWID=?
(かなり面倒ですね。Java からは、あまりInsertしない方が良さそうです)