我正在使用以下函数将二进制流值设置为预准备语句。
void setBlobValue(String value, PreparedStatement prepStmt, int index) throws SQLException, IOException {
if (value != null) {
InputStream inputStream = new ByteArrayInputStream(CharacterEncoder.getSafeText(value).getBytes());
if (inputStream != null) {
prepStmt.setBinaryStream(index, inputStream, inputStream.available());
} else {
prepStmt.setBinaryStream(index, inputStream, 0);
}
} else {
prepStmt.setBinaryStream(index, null, 0);
}
}
我使用此函数为H2,mysql,mssql,oracle,oracle_rac,DB2和informix数据库设置预准备语句。使用informix并发送null
作为值时,setBinaryStream
方法会提供NullPointerException
,即使在其他数据库中它也能正常运行。
这是什么原因?我该如何解决这个问题?
答案 0 :(得分:1)
我认为这是Informix JDBC驱动程序中的错误。
您已经检查inputStream
是否为null
,因此我认为最好使用setNull()
代替setBinaryStream()
:
if (inputStream != null) {
prepStmt.setBinaryStream(index, inputStream, inputStream.available());
} else {
prepStmt.setNull(index);
}
答案 1 :(得分:0)
这是由
修复的prepStmt.setBinaryStream(index, new ByteArrayInputStream(CharacterEncoder.getSafeText("").getBytes()), 0);
这是currrent informix dirver的错误。 Follwoting是另外两种解决方法。
setNULL(1,IfxTypes.IFX_TYPE_BLOB)
setObject(1,null)