“NzSQLException:更新计数超过 Integer.MAX_VALUE”错误仅在 JDBC 连接上

Posted

技术标签:

【中文标题】“NzSQLException:更新计数超过 Integer.MAX_VALUE”错误仅在 JDBC 连接上【英文标题】:"NzSQLException: The update count exceeded Integer.MAX_VALUE" ERROR only on JDBC connection 【发布时间】:2018-07-05 12:44:01 【问题描述】:

在 netezza 中构建一个相当大的表时,使用 JDBC 连接时出现以下错误:

org.netezza.error.NzSQLException: The update count exceeded Integer.MAX_VALUE.

确实被正确创建,但代码抛出异常。当我尝试使用 nzsql 运行相同的 SQL 时,我得到:

INSERT 0 2395423258

即没有抛出异常。看来 JDBC 中存储记录数的变量不够大?

还有其他人遇到过这个错误吗?你是怎么处理的?

【问题讨论】:

请显示相关代码和完整的异常堆栈跟踪 @MarkRotteveel,我可以显示确切的代码,但我很确定 ERROR 与实际的 sql 几乎没有关系。我认为问题在于构造表的大小。我会尽快收到完整的错误消息。 该错误与您的查询没有直接关系,但它与您如何执行它有关。我不了解 Netezza 本身,但我对 JDBC API 非常熟悉。最可能的原因是使用executeUpdate,它返回一个int 更新计数,这意味着该计数必须小于或等于2,147,483,647 并且2395423258 更大。一些驱动程序会简单地溢出,其他驱动程序会发出警告,但显然 Netezza 会抛出错误。 create table mytable as ( select * from verylartable ) distribute on (appropriate_key) organize on (date_field); 本质上是我的sql 的骨架。 换句话说,您的问题不完整,没有向我们提供所有必要的信息。您需要在问题中提供所有相关信息(包括minimal reproducible example 和完整的异常信息)。 JDBC 解决方案是使用execute(..)executeLargeUpdate(..)。我不知道 DBeaver 怎么可能做到这一点,我对 jaydebeapi 也一无所知。 【参考方案1】:

修改您的连接字符串以包含ignoreUpdateCount=on 作为参数,然后重试。

【讨论】:

首先@joeb,谢谢!此外,以下连接字符串模板似乎运行良好:jdbc:netezza://host:port/database;ignoreUpdateCount=True @tipanverella 很高兴听到您回答了您的问题。

以上是关于“NzSQLException:更新计数超过 Integer.MAX_VALUE”错误仅在 JDBC 连接上的主要内容,如果未能解决你的问题,请参考以下文章