我正在尝试使用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 = ?",它会毫无错误地运行,但这不是我正在寻找的。
?=' '
对于任何长度的参数都是通用的吗?
答案 0 :(得分:0)
由于裸参数标记中没有关于参数的确切数据类型或精度的信息,因此DB2服务器使用表达式的右侧来确定它。您可以使用显式强制转换为查询编译器提供必要的信息:
SELECT * FROM EMP WHERE cast(? as varchar(10)) = ' ' OR NAME = ?"
将varchar(10)
替换为EMP.NAME
的实际数据类型。