gpt4 book ai didi

java - MySQL + JDBC updateBlob 和 updateBinaryStream 抛出 NotUpdateable

转载 作者:行者123 更新时间:2023-11-29 21:33:51 24 4
gpt4 key购买 nike

我在 Google 和 StackOverflow 上搜索了两个多小时,但没有找到这个问题的解决方案。所以我转而提出这个问题。

我正在开发一个需要将数据插入表中的项目。我需要使用 ResultSet 类中的方法(例如 updateXXXXXinsertRow)。

特别是,我需要能够插入二进制流/blob(在我的情况下都可以)。但是,MySQL Java 驱动程序实现不支持此功能 ( implementation here )。事实上,它不支持任何 updateBlobupdateBinaryStream 方法。它们会抛出 NotUpdateable

在您发布我需要以支持 ResultSet.CONCUR_UPDATEABLE 的方式创建语句之前,请放心,我已经完成了该操作并对其进行了足够的检查次。请看下面:

// Create statement that is insensitive to insertion of data, and allows updating.
Statement s = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

// Get an empty query ready for insertion of data
ResultSet rs = s.executeQuery("SELECT * FROM TableName WHERE 1=0");

// This is a stream of bytes. If it were a String I would be fine.
rs.updateBinaryStream("password", new ByteArrayInputStream(db.password), db.password.length);

所以问题的关键在于,据我所知,如果不使用不同的驱动程序,没有等效的方法可以做到这一点。

如果您知道一种让它发挥作用的方法,我绝对很想听听。即使这只是一个理论。我想做的最后一件事是创建多个列并将数组存储为字节的 BIGINT 组合。

提前致谢,尼克。

最佳答案

不要使用可更新的结果集,尤其是现在您已经断定它不起作用。

由于您“正在开发一个需要将数据插入到表中的项目”,因此您应该尝试使用实际的INSERT 语句代替。

此外,您还可以使用 byte[] 方法,因为这就是您所拥有的,而不是尝试使用 InputStream 方法。

String sql = "INSERT INTO TableName (password) VALUES (?)";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setBytes(1, db.password);
stmt.executeUpdate();
}

关于java - MySQL + JDBC updateBlob 和 updateBinaryStream 抛出 NotUpdateable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35055036/

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