在 Oracle 数据库中将 byte[] 数组作为 blob 插入时出现 ORA-01460: 请求的转换未实现或不合理

2023-11-30

我有一个 java 存储过程,我试图将 byte[] 数组插入到表中的 oracle blob 字段中。

我创建了一个准备好的语句,如下所示,但是当我执行准备好的语句时,它会随机失败。我已经缩小范围,问题来自 pstmt.setBytes(4,content)。我得到的错误是:

ORA-01460: 请求的转换未实现或不合理。

private static void insertFile(Connection connOracle, int zipFileId, byte[] data, String filepath, String filename ) throws SQLException {

try {
    String QUERY = "INSERT INTO files(file_id, zip_file_id, filename, file_path, content) VALUES(SEQ_FILE_ID.nextval,?,?,?,?)";

    PreparedStatement pstmt = connOracle.prepareStatement(QUERY);

    pstmt.setInt(1,zipFileId);
    pstmt.setString(2, filename);
    pstmt.setString(3, filepath);
    pstmt.setBytes(4, data);

    System.out.println("INSERTING file_id " + filepath + ", " + filename + " INTO DATABASE");

    pstmt.execute();
    pstmt.close();
}
catch (SQLException e) {
    throw new SQLException(e.getMessage());  
}

如果我没记错的话,Oracle JDBC 驱动程序(至少在较旧的驱动程序中 - 您没有告诉我们您正在使用哪个版本)不支持setBytes() (or getBytes()).

根据我的经验,使用setBinaryStream()更加可靠和稳定:

InputStream in = new ByteArrayInputStream(data);
pstmt.setBinaryStream(4, in, data.length);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Oracle 数据库中将 byte[] 数组作为 blob 插入时出现 ORA-01460: 请求的转换未实现或不合理 的相关文章

随机推荐