みなさまこんにちは、ムチャ@うつ病SE(@mutoj_rdm821)です。
今回は、ファイルメーカーサーバーに対してJDBC接続するお話です。
あまり需要はないと思いますが、情報もほとんどなかったのでまとめておきたいと思います。
※ファイルメーカークラウドはJDBC接続に対応していません。
JDBC接続を許可する
ファイルメーカーサーバーの管理コンソールにログインし、「コネクタ」から「ODBC/JDBC」を選択し、「ODBC/JDBC接続」を有効にします。
ドライバをダウンロードする
以下のURLからJDBCドライバをダウンロードします。
JDBC接続を行う
Spring Data JPAを使おうと思ったのですが、ドライバが対応していない云々のメッセージが出てくるので諦めました。
一般的な、
DriverManagerを使ったJDBC接続を行います。URLは以下の形式です。
jdbc:filemaker://[ホスト名]/[データベース名]
接続自体は何度も見た以下のコードで取得します。
Connection con = DriverManager.getConnection(url, username, password);
SQLを記述する
テーブル名やカラム名に日本語やスペースを含む場合、ダブルクォートでくくる必要があります。
これは普通に文字列で書こうとするとエスケープが大変ですが、Java15で追加された「テキストブロック」を使えばきれいに記述できます。
String sql = """
select
"主キー" as pk,
"作成時刻" as "date",
"カテゴリ" as category,
"ファイルパス" as Name
from
"添付ファイル"
where
"案件ID" = ?
""";
ダブルクォート3つで囲んだ部分が1つの文字列になります。改行やインデントも含みます。この中ではダブルクォートもエスケープせずに記述できます。
作成したSQL文字列から
PreparedStatementを生成して、後は通常のSQL実行と同じです。バイナリファイルを取得する
データベースにバイナリファイルを格納していて、それを取得するには
GetAs関数を使います。String sql = """
select
"主キー" as pk,
"作成時刻" as "date",
"カテゴリ" as category,
"ファイル名" as Name,
GetAs("ファイル本体",DEFAULT) as file,
"案件ID" as applicationId
from
"添付ファイル"
where
"主キー" = ?
""";
関数の第2引数は
DEFAULTで大丈夫です。SQLを実行後、バイナリデータを取得するには以下のコードでできました。try (Connection con = manager.createConnection(); PreparedStatement ps = con.prepareStatement(sql);) {
ps.setString(1, pk);
try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
InputStream in = rs.getBlob("file").getBinaryStream();
byte[] contents = in.readAllBytes();
:
まとめ
ファイルメーカーサーバーに対してJDBC接続をし、SQLを発行する手順についてまとめました。
ファイルメーカーのJDBCドライバはエラーメッセージが短くて分かりづらいので、この記事がお役に立てば幸いです。
それではみなさまよきJavaライフを(´∀`)ノ



