PreparedStatement.setBinaryStream 用于 informix JDBC 驱动程序
PreparedStatement.setBinaryStream for informix JDBC driver
我正在使用以下函数将二进制流值设置为准备好的语句。
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
,即使在其他数据库中它工作正常。
这是什么原因?我该如何解决这个问题?
我认为这是 Informix JDBC 驱动程序中的错误。
您已经检查过 inputStream
是否为 null
所以我认为最好使用 setNull()
而不是 setBinaryStream()
:
if (inputStream != null) {
prepStmt.setBinaryStream(index, inputStream, inputStream.available());
} else {
prepStmt.setNull(index);
}
此问题已由
修复
prepStmt.setBinaryStream(index, new ByteArrayInputStream(CharacterEncoder.getSafeText("").getBytes()), 0);
这是当前informix驱动的一个bug。以下是另外两个解决方法。
setNULL(1,IfxTypes.IFX_TYPE_BLOB)
setObject(1,null)
我正在使用以下函数将二进制流值设置为准备好的语句。
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
,即使在其他数据库中它工作正常。
这是什么原因?我该如何解决这个问题?
我认为这是 Informix JDBC 驱动程序中的错误。
您已经检查过 inputStream
是否为 null
所以我认为最好使用 setNull()
而不是 setBinaryStream()
:
if (inputStream != null) {
prepStmt.setBinaryStream(index, inputStream, inputStream.available());
} else {
prepStmt.setNull(index);
}
此问题已由
修复prepStmt.setBinaryStream(index, new ByteArrayInputStream(CharacterEncoder.getSafeText("").getBytes()), 0);
这是当前informix驱动的一个bug。以下是另外两个解决方法。
setNULL(1,IfxTypes.IFX_TYPE_BLOB)
setObject(1,null)