【发布时间】:2021-05-11 11:50:22
【问题描述】:
我正在尝试以通用方式从 Derby 数据库中读取数据,并且我想将 UUID 检索为字节数组 16。通常对于二进制类型,我可以使用 Blob 并将其映射到字节数组。但是在 Derby 中,我得到了这个异常:'试图从 'CHAR () FOR BIT DATA' 类型的数据值中获取 'java.sql.Blob' 类型的数据值。'
架构
CREATE TABLE Contacts( ID CHAR(16) FOR BIT DATA NOT NULL PRIMARY KEY ... etc
这给了我 java.sql.Types -2 (BINARY)
当我使用 rs.getBlob 时它失败了:
byte[] buffer = new byte[1024];
Blob blob = rs.getBlob(column);
try (InputStream in = blob.getBinaryStream()) {
ByteArrayOutputStream bos = new ByteArrayOutputStream((int) blob.length());
for (int len; (len = in.read(buffer)) != -1; ) {
bos.write(buffer, 0, len);
}
value = bos.toByteArray();
}
但如果我使用它确实有效:
value = rs.getBytes(column)
现在我可以只使用 rs.getBytes,除非以后我还需要来自 Derby 的“真实”Blob。我怎么能分辨出区别?还是 Derby 总是使用 getBytes?
【问题讨论】:
-
CHAR FOR BIT DATA与BLOB不同。它们是两种不同的数据类型。两者都与CLOB不同。使用 JDBCBLOBAPI 访问BLOB和CLOB列,而不是访问其他数据类型的列。这是你的问题吗? -
@BryanPendleton 没关系。只要我能够从 jdbc 元数据中分辨出来。我可以。