我正在设置这样的SQL准备语句:
prd.setBytes(i+1, temp_value);
其中temp_value的类型为byte []。
最后,我将prd语句添加到这样的批处理中:
prd.addBatch();
prd.executeBatch();
executeBatch给了我一个例外:
java.sql.BatchUpdateException:将数据类型varbinary转换为数值时出错。
无论DataBase表中的字段是Numeric类型还是任何其他类型,是否都可以将Bytes简单地添加到准备好的语句中?
我必须具体说明要插入的类型吗?
最佳答案
setBytes
方法旨在用于SQL BLOB类型,例如varbinary
,longvarbinary
等。对于数字类型,您需要使用BigDecimal
,BigInteger
或数字基元。
允许setBytes
与非二进制类型一起使用的问题是系统独立性:您需要将驱动程序的预期布局与一个多字节数字相匹配,并具有可能需要JDBC驱动程序编写者发布的非常复杂的结构。发布此布局后,他们的驱动程序将不得不终身与其兼容。但是,大多数驱动程序编写者都希望避免与客户端代码如此紧密地耦合。