使用jdbc中的PreparedStatement在DB212中的char列中设置二进制值

使用jdbc中的PreparedStatement在DB212中的char列中设置二进制值,jdbc,binary,char,db2,prepared-statement,Jdbc,Binary,Char,Db2,Prepared Statement,我需要在DB212(使用驱动程序4.25.21)中更新表中的CHAR列。 我总是使用PreparedStatement来避免sql注入。 有时我需要向数据库发送一个二进制值 如果使用Oracle,您只需使用setBytes(byte[]),但DB2给了我一个错误: SQLCODE=-301,SQLSTATE=42895:com.ibm.db2.jcc.am.SqlSyntaxErrorException:输入变量或参数编号1的值由于其数据类型而无法按指定方式使用。SQLCODE=-301,SQL

我需要在DB212(使用驱动程序4.25.21)中更新表中的CHAR列。 我总是使用PreparedStatement来避免sql注入。 有时我需要向数据库发送一个二进制值

如果使用Oracle,您只需使用
setBytes(byte[])
,但DB2给了我一个错误:

SQLCODE=-301,SQLSTATE=42895:com.ibm.db2.jcc.am.SqlSyntaxErrorException:输入变量或参数编号1的值由于其数据类型而无法按指定方式使用。SQLCODE=-301,SQLSTATE=42895,DRIVER=4.25.21

我试过一个像
。。。将column=设置为_char(?)
然后使用
setBytes()
但是我得到

SQLCODE=-418,SQLSTATE=42610:com.ibm.db2.jcc.am.SqlSyntaxErrorException:要准备的语句字符串包含无效的参数标记用法。SQLCODE=-418,SQLSTATE=42610,DRIVER=4.25.21

我知道a可以用Java在EBCDIC中构建字符串,但我更希望由数据库进行转换


我该怎么做?

列数据类型是什么?这是Db2 for z/OS吗?您要设置的示例值是什么?列数据类型是CHAR是的,它是Db2 for z/OS。值可以是任何值。值可以是任何带前缀的二进制。我忘了说可以使用十六进制格式发送de值。您可以尝试
set column=cast(?对于位数据为varchar(XXX)
。根据值的最大输入长度,以字节为单位设置
XXX
。列数据类型是什么?这是Db2 for z/OS吗?您要设置的示例值是什么?列数据类型是CHAR是的,它是Db2 for z/OS。值可以是任何值。值可以是任何带前缀的二进制。我忘了说可以使用十六进制格式发送de值。您可以尝试
set column=cast(?对于位数据为varchar(XXX)
。根据值的最大输入长度,以字节为单位设置
XXX