DB2 强制按位或(如果使用ResultSet.TYPE_SCROLL_INSENSITIVE)



我使用 JDBC 连接到具有 blu 加速的 db2 luw 11.x db2 luw 没有 blu 加速也有同样的问题。

conn.createStatement(
                ResultSet.TYPE_SCROLL_INSENSITIVE,
                ResultSet.CONCUR_READ_ONLY,
                ResultSet.HOLD_CURSORS_OVER_COMMIT)
ResultSet rs = stmt.executeQuery(sql);

我们应用程序中一个可能的查询是(简化(,其中 myNumericColumn 是一个数字数据类型:

SELECT * FROM myTable WHERE
    myNumericColumn = 123 OR 'ALL' IN (123)

123可以更改为另一个值。准备好的字符串是可能的,如 'ALL' .在本例中,查询如下所示:

SELECT * FROM myTable WHERE
    myNumericColumn = 'ALL' OR 'ALL' IN ('ALL')

右手将是真的,所以左手不会被评估。如果我移除右手(或将条件更改为 false(,我们会出现数字溢出异常(将数字与字符串进行比较(。

com.ibm.db2.jcc.am.SqlDataException: Overflow occurred during numeric data type conversion.. SQLCODE=-413, SQLSTATE=22003, DRIVER=4.23.42

如果我将 createStatement 更改为以下命令或删除所有 ResultSet 属性(ResultSet.TYPE_FORWARD_ONLY将用作默认值(,则没有例外。

conn.createStatement(
                ResultSet.TYPE_FORWARD_ONLY,
                ResultSet.CONCUR_READ_ONLY,
                ResultSet.HOLD_CURSORS_OVER_COMMIT)

为什么强制 JDBC/JDBC 驱动程序/数据库使用按位或更改结果集的类型?如何改变这种行为?

感谢和最诚挚的问候

答案很简单:不要做这样的事情
谓词描述中有一条语句:

  • 谓词中指定的所有值必须兼容

如果确实评估了搜索条件的谓词以及在某些特定情况下的顺序,则无法保证。

相关内容

  • 没有找到相关文章

最新更新