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 为我指明了这个方向。
在我的集成测试中,我配置了我的 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 为我指明了这个方向。