gpt4 book ai didi

java - 在 Oracle 数据库中插入 byte[] 数组作为 blob 得到 ORA-01460 : unimplemented or unreasonable conversion requested

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:54:01 26 4
gpt4 key购买 nike

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

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

ORA-01460: unimplemented or unreasonable conversion requested.

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()(或 getBytes()).

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

InputStream in = new ByteArrayInputStream(data);
pstmt.setBinaryStream(4, in, data.length);

关于java - 在 Oracle 数据库中插入 byte[] 数组作为 blob 得到 ORA-01460 : unimplemented or unreasonable conversion requested,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7794197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com