DB2 V10 zOS JDBC获得SQLCODE -302

时间:2013-09-02 14:03:10

标签: java sql jdbc db2 zos

我正在尝试使用JDBC Type 4 Connection对z / OS DB2执行查询。查询简化了:

PreparedStatement stmt = conn.prepareStatement("SELECT * FROM EMP WHERE ? = ' ' OR NAME = ?");  
    stmt.setString(1, "Joe");  
    stmt.setString(2, "Joe");

运行此查询将导致SQLCODE -302,因为Joe长度为3,空白长度为1。

如果我将查询更改为

"SELECT * FROM EMP WHERE ? = '   ' OR NAME = ?"
,它会毫无错误地运行,但这不是我正在寻找的。
可能有一个JDBC属性使表达式?=' '对于任何长度的参数都是通用的吗?

1 个答案:

答案 0 :(得分:0)

由于裸参数标记中没有关于参数的确切数据类型或精度的信息,因此DB2服务器使用表达式的右侧来确定它。您可以使用显式强制转换为查询编译器提供必要的信息:

SELECT * FROM EMP WHERE cast(? as varchar(10)) = ' ' OR NAME = ?"

varchar(10)替换为EMP.NAME的实际数据类型。