Jooq 本机查询不使用连接信息

Jooq native query doesn't use connection information

在我的集成测试中,我配置了我的 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.. 命令中清楚地看到。错误:

Caused by: org.mariadb.jdbc.internal.util.exceptions.MariaDbSqlException: INSERT command denied to user 'test'@'172.17.0.1' for table 'ATTACHMENT' at org.mariadb.jdbc.internal.util.exceptions.MariaDbSqlException.of(MariaDbSqlException.java:34) at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.exceptionWithQuery(AbstractQueryProtocol.java:194) at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.exceptionWithQuery(AbstractQueryProtocol.java:177) at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:321) at org.mariadb.jdbc.ClientSidePreparedStatement.executeInternal(ClientSidePreparedStatement.java:220) ... 72 more Caused by: java.sql.SQLException: INSERT command denied to user 'test'@'172.17.0.1' for table 'ATTACHMENT' at org.mariadb.jdbc.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 more

为什么 dslContext 对 .query() 有单独的配置?还是我误解了什么?非常感谢您的意见,谢谢。

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