【发布时间】:2018-06-25 12:43:20
【问题描述】:
我在 Oracle 中有 RAW(16) PK 列,并尝试使用 JDBC 将其插入:
PreparedStatement stmt = connection.prepareStatement("insert into COUNTRY (id, state, version, code, name, nationality, issuing_entity, country) values (?, ?, ?, ?, ?, ?, ?, ?)");
UUID id = UUID.randomUUID();
stmt.setObject(1, id, Types.BINARY);
但是,我遇到了一个异常:
java.sql.SQLException: Invalid column type
at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:8494)
at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:7995)
at oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:8559)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject(OraclePreparedStatementWrapper.java:225)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.setObject(HikariProxyPreparedStatement.java)
at rw.gov.dgie.framework.test.AbstractTestCaseWithDB.tryToInsertCountry(AbstractTestCaseWithDB.java:78)
at rw.gov.dgie.framework.test.AbstractTestCaseWithDB.dbSetup(AbstractTestCaseWithDB.java:62)
at test.rw.gov.dgie.bms.terr.service.TestCountryService.init(TestCountryService.java:37)
我在尝试使用 DbSetup 插入测试数据时遇到了同样的异常。
有没有办法让 JDBC 将 UUID 插入 RAW(16) 列?
我使用的是 Oracle JDBC 12.2.0.1.0。
【问题讨论】:
-
你不能保存
id.toString()吗? -
恕我直言,您必须将 byte[] 之类的内容传递给 JDBC 驱动程序以允许存储数据类型 RAW。
-
id.toString()?进入RAW(16)?但是怎么做呢?
-
@ibre5041,我可以把它写成字节,但我需要让 DbSetup 工作。休眠工作正常
-
用 setBytes() 代替 setObject() 怎么样?
标签: java oracle jdbc uuid dbsetup