“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 连接上的主要内容,如果未能解决你的问题,请参考以下文章