0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

FileMaker に JDBCとMyBatisで接続する

Posted at

私もつい最近JDBCやってみました

  • Java8(Java1.8)
  • FileMaker Pro 18 Advanced
  • FileMaker Pro 19

と思ったら、既に記事を書かれている方がいました。

FileMaker ServerからJDBCで検索する

私の場合はFileMakerServerは使わず、ローカルのFileMaker Proを立ち上げて、そこにJavaからlocalhost(127.0.0.1)で接続しました。

で、結果はというと、JDBCを直接使う場合は、ほぼ問題なし。

但し、MyBatisを使う場合には、色々問題が起こってしまいました。

com.filemaker.jdbc3.CommonJ3ResultSet.isClosed の例外発生

FileMaker ServerからJDBCで検索する

こちらに書かれているのと同じ症状。

また不便だなと思ったのは、上記に書かれているのと同じ
「日本語のテーブル名やカラム名は"で括る必要がありました。」
の症状です。

別の解決策があったので、ご紹介します。たまたま見つけました!

私が普段使っていた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しない方が良さそうです)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?