用于informix JDBC驱动程序的PreparedStatement.setBinaryStream

时间:2015-07-14 03:57:34

标签: database jdbc blob informix

我正在使用以下函数将二进制流值设置为预准备语句。

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,即使在其他数据库中它也能正常运行。

这是什么原因?我该如何解决这个问题?

2 个答案:

答案 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)