使用 DataGrip 连接到 Informix 数据库时出现问题

问题描述 投票:0回答:1

我使用 Windows 11 系统和 DataGrip 2024.1.2 客户端通过 Informix JDBC 4.50.10 驱动程序连接到 Informix 服务器。 使用以下连接参数。

jdbc:informix-sqli://IP:PORT/xx:informixserver=pnib;DBDATE=MDY4;NEWLOACLE=en_us,zh_cn,zh_tw;NEWCODESET=GB2312-80,8859-1,819,Big5,GB18030

但是出现了如下图所示的错误。 Error prompts during client connection

双击进入表格时,出现以下错误 Error prompts during execute SQL

我将Informix JDBC的数据库驱动版本更改为4.10.x,但这并没有生效。

然后我使用相同的设置切换到 DBeaver 客户端,并能够正常连接到 Informix 数据库。

database database-connection informix datagrip
1个回答
0
投票

将评论转化为答案。

您的第二张图片似乎列出了

SELECT t.* FROM cxx99.ajmldm t LIMIT 501
并引用了错误
-201: Syntax error
。令我相当惊讶的是,
LIMIT 501
子句后面的符号
FROM
在 Informix 中是有效的,至少在最近的版本中是这样。您使用的是哪个版本的 Informix 服务器?如果您使用 JDBC 4.50 驱动程序,则它应该是 Informix 14.10。 Informix 中还有其他符号,特别是
SELECT LIMIT 501 t.* FROM cxx99.ajmldm t
(这是我期望使用的符号 - 幸运的是,我在发布之前检查了手册并进行了测试)。

我想知道是 JDBC 驱动程序正在解析 SQL 并生成错误,还是服务器正在生成错误。检查这一点的一种方法是使用

dbaccess
对数据库运行查询 - 尽管我建议使用小于 501 的数字进行测试。如果有效,那么问题很可能出在 JDBC 驱动程序中。如果失败并出现
-201
错误,则您的服务器可能已经足够旧,无法支持 SQL 末尾的 LIMIT。

请参阅主 SELECT 语句手册页链接的 投影子句限制子句

您的 SQL 在 SELECT 语句末尾附近使用 LIMIT 子句;在语法中,它出现在(可选)ORDER BY 子句之后。一些研究表明,允许该语法的代码是在 2013 年末添加的。您必须使用非常旧的服务器,服务器才能识别该语法。

该服务器上的Informix数据库版本是11.5

Informix 11.50版本已经长期不再支持;随后的 11.70 版本也是如此。标准建议是升级,但我认为您的公司有理由不升级。您可以尝试使用前面提到的符号

SELECT LIMIT 501 t.* FROM cxx99.ajmldm t
- 在您使用的符号受支持之前就已受支持,但我现在不确定这是否是 11.50 的一部分。

虽然客户端提示“失败”,但我可以正常连接数据库并使用查询语句。经过搜索相关问题,我发现这些错误实际上可能是Warnings,不会影响我们正常使用查询语句。解决办法是你可以设置命令

SET client_min_messages TO ERROR;
——这个操作正确吗?

这是连接时的错误信息:

DBMS: Informix Dynamic Server (ver. 11.50.FC9)
Case sensitivity: plain=lower, delimited=lower
Driver: Informix JDBC Driver for Informix Dynamic Server (ver. 4.50.JC10, JDBC4.2)
Ping: 187 ms
[01I01] Database has transactions.
[01I04] Database selected.

连接时打印的信息没有显示任何错误。 SQLCODE 的 01I01 和 01I04 值提供信息而不是错误。事实上,代码可以识别数据库有事务这一事实意味着它已连接,并且“数据库已选择”消息也表明连接成功。此外,如果您无法连接到数据库,您不会收到 -201 语法错误消息。

如果有什么东西可以让您配置正在使用的软件不打印警告,或者将打印的警告视为错误,那么这可能是一个好方法。您不应该完全忽略警告,但应该仔细评估它们。

© www.soinside.com 2019 - 2024. All rights reserved.