Java MySQL+;JDBC updateBlob和updateBinaryStream抛出NotUpdateable
我在Google和StackOverflow上搜索了两个多小时,但还没有找到解决这个问题的方法。所以我转而问这个问题 我正在做一个需要将数据插入表中的项目。我需要使用ResultSet类中的方法(例如Updatexxxx和insertRow) 特别是,我需要能够插入一个二进制流/blob(在我的例子中,这两种方法都可以)。但是,MySQL Java驱动程序实现不支持此()。事实上,它不支持任何updateBlob或updateBinaryStream方法。。它们抛出不可更新的 在您发布我需要以支持ResultSet.CONCUR_UPDATEABLE的方式创建语句之前,请确保我已经这样做并检查了足够多次。请参阅下文:Java MySQL+;JDBC updateBlob和updateBinaryStream抛出NotUpdateable,java,mysql,sql,jdbc,Java,Mysql,Sql,Jdbc,我在Google和StackOverflow上搜索了两个多小时,但还没有找到解决这个问题的方法。所以我转而问这个问题 我正在做一个需要将数据插入表中的项目。我需要使用ResultSet类中的方法(例如Updatexxxx和insertRow) 特别是,我需要能够插入一个二进制流/blob(在我的例子中,这两种方法都可以)。但是,MySQL Java驱动程序实现不支持此()。事实上,它不支持任何updateBlob或updateBinaryStream方法。。它们抛出不可更新的 在您发布我需要以支
// 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();
}
您需要使用
insertRow()
?真正地为什么?@Andreas未知数据库软件的交叉兼容性。INSERT
语句的交叉兼容性如何低于使用伪SELECT
语句的可更新ResultSet
?公平点。我来试试,我来试试。谢谢