sourcecode

Jooq native 쿼리가 연결 정보를 사용하지 않습니다.

copyscript 2023. 7. 3. 23:07
반응형

Jooq native 쿼리가 연결 정보를 사용하지 않습니다.

통합 테스트에서 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.insertIn..에서 볼 수 있듯이 내 dslContext가 잘 구성되어 있기 때문입니다.명령을 실행합니다.오류:

org.mariadb.jdbc.internal.util.exceptions로 인해 발생합니다.MariaDbSqlException: org.mariadb.jdbc.internal.util.exceptions의 'attachment' 테이블에 대해 'test'@'172.17.0.1' 사용자에게 INSERT 명령이 거부되었습니다.org.mariadb.jdbc.internal.protocol의 MariaDbSqlException.of(MariaDbSqlException.java:34).추상 쿼리 프로토콜입니다.예외.쿼리 사용(AbstractQuery Protocol).java:java)가 org.jbc.jdbc.internal.java에 있습니다.추상 쿼리 프로토콜입니다.예외.쿼리 사용(AbstractQuery Protocol).java:java)가 org.jbc.jdbc.internal.java에 있습니다.추상 쿼리 프로토콜입니다.executeQuery(AbstractQueryProtocol).java:321)이(가) org.javadb.jdbc에 있습니다.ClientSide Preparated Statement.execute내부(ClientSidePreparedStatement.java:220) ... 72개 이상의 원인: java.sql.SQL 예외: org.mariadb.jdbc.internal.protocol의 'attachment' 테이블에 대해 'test'@'172.17.0.1 사용자에게 INSERT 명령이 거부되었습니다.AbstractQueryProtocol.readErrorPacket(AbstractQueryProtocol)입니다.java:1694)가 org.javadb.jdbc.internal.java에 있습니다.AbstractQueryProtocol.readPacket(AbstractQueryProtocol)입니다.java:1556)가 org.javadb.jdbc.internal.java에 있습니다.AbstractQueryProtocol.getResult(AbstractQueryProtocol).java:1519)가 org.javadb.jdbc.internal.java에 있습니다.추상 쿼리 프로토콜입니다.executeQuery(AbstractQueryProtocol).java:318) ... 73개 이상

dslContext에 .query()에 대해 별도의 구성이 있는 이유는 무엇입니까?아니면 제가 뭔가 오해한 건가요?당신의 의견에 감사드립니다.

그래서, 저는 당황스럽게도, 해결책은 매우 간단합니다.방금 제 sql 스크립트에서 "데이터베이스"를 제거했는데 작동합니다.이 방향을 알려주신 루카스 에더에게 감사드립니다.

언급URL : https://stackoverflow.com/questions/69538894/jooq-native-query-doesnt-use-connection-information

반응형