統合テスト内で dslContext を構成しました
String connectionURL = mariaDBContainer.getJdbcUrl();
String username = mariaDBContainer.getUsername();
String pw = mariaDBContainer.getPassword();
DSLContext dslContext = DSL.using(DriverManager.getConnection(connectionURL, username, pw), SQLDialect.MARIADB);
そして挿入を書きました:
dslContext
.insertInto(ATTACHMENT, ATTACHMENT.ID_ATTACHMENT)
.values("abc", 999L)
.execute();
これはかなりうまく機能します。全く問題無い。
したがって、大量のデータを追加する必要があるため、コードベースにあまりデータを追加したくありません。そこで、挿入をファイルに移動し、テスト内で読み取りました。
Files.readAllLines(Paths.get("src/test/resources/attachments.sql"), StandardCharsets.UTF_8)
.forEach(queryValue -> dslContext.query(queryValue).execute());
DBeaver によって生成された挿入ステートメントをファイルにコピー ペーストし、あとは jooq に任せることができるので、これは私にとって非常に便利です。SQL ファイルの内容は次のとおりです。
INSERT INTO database.ATTACHMENT (ID_ATTACHMENT, ID_ATTACHMENT_DATA_REF)
VALUES('iuha99assU-eZ8ijZaHkUQ', 24719);
INSERT INTO database.ATTACHMENT (ID_ATTACHMENT, ID_ATTACHMENT_DATA_REF)
VALUES('iuha99assU-OPoias98s7', 27085);
....
しかし!suceessfull で実行された dslContext.insertInto.. コマンドから明確にわかるように、dslContext が適切に構成されているため、接続の問題がスローされますが、その理由はわかりません。エラー:
原因: org.mariadb.jdbc.internal.util.exceptions.MariaDbSqlException: org.mariadb.jdbc.internal.util.exceptions.MariaDbSqlException のテーブル 'ATTACHMENT' に対するユーザー 'test'@'172.17.0.1' に対する INSERT コマンドが拒否されました.of(MariaDbSqlException.java:34) org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.exceptionWithQuery(AbstractQueryProtocol.java:194) で org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.exceptionWithQuery(AbstractQueryProtocol.java:177) ) org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:321) で org.mariadb.jdbc.ClientSidePreparedStatement.executeInternal(ClientSidePreparedStatement.java:220) ... 72 以上 原因: java.sql .SQLException: org.mariadb.jdbc のテーブル 'ATTACHMENT' のユーザー 'test'@'172.17.0.1' に対する INSERT コマンドが拒否されました。internal.protocol.AbstractQueryProtocol.readErrorPacket(AbstractQueryProtocol.java:1694) at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1556) at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult( AbstractQueryProtocol.java:1519) at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:318) ... 73 詳細
dslContext に .query() 用の個別の構成があるのはなぜですか? それとも私は何かを誤解していますか?ご意見ありがとうございます。