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);
....

但!引发了连接问题,我不知道为什么,因为我的 dslContext 配置良好,您可以从成功执行的 dslContext.insertInto.. 命令中清楚地看到。错误:

原因: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.ClientSidePreparedStatement.executeInternal(ClientSidePreparedStatement.java:220) 的 org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:321) ... 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) 在 org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:318) ... 73 更多

为什么 dslContext 对 .query() 有单独的配置?还是我误解了什么?我很欣赏你的意见,谢谢。

4

1 回答 1

1

所以,让我尴尬的是,解决方案非常简单:我刚刚从我的 sql 脚本中删除了“数据库”,它就可以工作了。感谢 Lukas Eder 为我指明了这个方向。

于 2021-10-12T11:11:11.690 回答