1

統合テスト内で 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() 用の個別の構成があるのはなぜですか? それとも私は何かを誤解していますか?ご意見ありがとうございます。

4

1 に答える 1