尝试运行连接Informix数据库的代码,但还会显示完整的异常信息并创建跟踪文件。一个跟踪文件用于JDBC,一个跟踪文件用于Informix。将URL更改为数据库,用户名和密码,然后运行它。您可能会在屏幕上或跟踪文件中看到问题:
import java.io.FileWriter;import java.io.PrintWriter;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;class informix_trace { public static void main(String[] args) { try { Class.forName("com.informix.jdbc.IfxDriver"); FileWriter fwTrace = new FileWriter("c:\JDBCTrace.log"); PrintWriter pwTrace = new PrintWriter(fwTrace); DriverManager.setLogWriter(pwTrace); String debug_url = "SQLIDEBUG=C:\sqlidebug.trace"; String url = "jdbc:informix-sqli://1.2.3.4:9088/test_db:informixserver=ol_testifx;DB_LOCALE=pl_PL.CP1250;CLIENT_LOCALE=pl_PL.CP1250;charSet=CP1250;" + debug_url Connection connection = DriverManager.getConnection(url, "user", "passwd"); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("SELECt FIRST 1 DBINFO('version','full') FROM systables;"); while (resultSet.next()) System.out.println(resultSet.getObject(1)); } catch (Exception e) { e.printStackTrace(); } } } // class informix_traceInformix跟踪文件将带有一些后缀(时间戳或类似信息),在我的情况下,它类似于
sqlidebug.trace1391758523500.0。它是二进制的,但是您可以使用
sqliprt实用程序对其进行分析。
错误数据库名称的会话示例:
c:>sqliprt sqlidebug.trace1391758523500.0SQLIDBG Version 1 ...S->C (12) SQ_ERR SQL error..........: -329 ISAM/RSAM error....: -111 Offset in statement: 0 Error message......: "" [0] SQ_EOT
在其中
JDBCTrace.log可以找到更多有趣的信息(在屏幕上也可以看到):
SQLState(IX000) vendor pre(-111)java.sql.SQLException: ISAM error: no record found. at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:413) at com.informix.jdbc.IfxSqli.E(IfxSqli.java:3412) at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2324) .... at java.sql.DriverManager.getConnection(Unknown Source) at informix_trace.main(informix_trace.java:20)getConnection failed: java.sql.SQLException: No database found or wrong system privileges.
(我已将其翻译成波兰语,因此可能会有所不同)



