0

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

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

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

如果我将查询更改为

“从 EMP 中选择 * 在哪里?= ' ' 或名称 = ?”
它运行没有错误,但这不是我想要的。
是否有一个 JDBC 属性可以使表达式?=' '对于任何长度的参数都通用?

4

1 回答 1

0

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

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

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

于 2013-09-02T17:38:59.390 回答