te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>java - Problem connecting to Informix database with new JDBC driver 15.0.0.0 - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

java - Problem connecting to Informix database with new JDBC driver 15.0.0.0 - Stack Overflow

programmeradmin4浏览0评论

I tried to use new Informix JDBC driver from .ibm.informix/jdbc

I have simple program that tests connection time to a database. With Informix JDBC driver 4.50.JC11 it works well:

export CLASSPATH=jdbc-4.50.11.jar

[mn:~/jdbc_connect_test] ./jdbc_connect_test_ifx.sh
OS: Linux 6.12.13-200.fc41.x86_64 amd64
Java version: 21.0.6 Red Hat, Inc.
--------------
JDBC drivers:
com.informix.jdbc.IfxDriver@76ed5528 ver: 4.2
--------------
Test [jdbc:informix-sqli://test-informix.testd:9088/multi:informixserver=ol_testifx]
JDBC driver version: '4.50.JC11'; major: 4; minor: 50
Test  1:    88 [ms] com.informix.jdbc.IfxSqliConnect@725bef66
Test  2:    14 [ms] com.informix.jdbc.IfxSqliConnect@2aaf7cc2
...

When I changed CLASSPATH to point at jdbc-15.0.0.0.jar it fails with strange exception:

export CLASSPATH=jdbc-15.0.0.0.jar

[mn:~/jdbc_connect_test] ./jdbc_connect_test_ifx.sh
OS: Linux 6.12.13-200.fc41.x86_64 amd64
Java version: 21.0.6 Red Hat, Inc.
--------------
JDBC drivers:
com.informix.jdbc.IfxDriver@7a81197d ver: 4.2
com.informix.jdbc.InformixDriver@27bc2616 ver: 15.0
--------------
Test [jdbc:informix-sqli://test-informix.testd:9088/multi:informixserver=ol_testifx]
Exception in thread "main" java.lang.IllegalMonitorStateException
    at java.base/java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(ReentrantLock.java:175)
    at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.release(AbstractQueuedSynchronizer.java:1059)
    at java.base/java.util.concurrent.locks.ReentrantLock.unlock(ReentrantLock.java:494)
    at com.informix.jdbc.IfxSqliConnect.unlockSession(IfxSqliConnect.java:2696)
    at com.informix.jdbc.IfxSqli.executeStatementQuery(IfxSqli.java:1239)
    at com.informix.jdbc.IfxResultSet.executeQuery(IfxResultSet.java:132)
    at com.informix.jdbc.IfxStatement.executeQuery(IfxStatement.java:744)
    at com.informix.jdbc.IfxStatement.executeQuery(IfxStatement.java:169)
    at com.informix.jdbc.IfxStatement.executeQuery(IfxStatement.java:157)
    at com.informix.jdbc.IfxSqliConnect.getSqlLogicalChar(IfxSqliConnect.java:3795)
    at com.informix.jdbc.IfxDatabaseMetaData.<init>(IfxDatabaseMetaData.java:306)
    at com.informix.jdbc.IfxSqliConnect.getMetaData(IfxSqliConnect.java:1737)
    at jdbc_connect_test.test_connection(jdbc_connect_test.java:34)
    at jdbc_connect_test.main(jdbc_connect_test.java:91)

Code fails on db.getMetaData(), but I tried also simple executeQuery() and it fails with the same exception:

public static void test_connection(int n, String jdbc_url, String jdbc_username, String jdbc_passwd)
    {
    long t0 = System.currentTimeMillis();
    Connection db = null;
    try
        {
        try
            {
            db = DriverManager.getConnection(jdbc_url, jdbc_username, jdbc_passwd);
            long t2 = System.currentTimeMillis();
            if (n == 0)
                {
                DatabaseMetaData dbmi = db.getMetaData();
                System.out.format("JDBC driver version: '%s'; major: %s; minor: %s\n", dbmi.getDriverVersion(), dbmi.getDriverMajorVersion(), dbmi.getDriverMinorVersion());
                }
            System.out.format("Test %2d: %5d [ms]\t%s\n", (n+1), (t2 - t0), db);
            }
        finally
            {
            if (db != null)
                db.close();
            }
        }
    catch (SQLException e)
        {
        e.printStackTrace();
        }
    }

Anybody tried Informix JDBC driver 15.0.0.0 with success?


EDIT

With the new 15.0 driver I can connect to Informix 14.10 database and it works, but it cannot connect with Informix 11.50.

With the old 4.50 driver I can connect to Informix 11.50 database:

[mn:~/test/tools/javatools/jdbc_connect_test] ./jdbc_connect_test_ifx.sh
OS: Linux 6.12.13-200.fc41.x86_64 amd64
Java version: 21.0.6 Red Hat, Inc.
classpath: bson-5.3.1.jar:jdbc-4.50.11.jar:
--------------
JDBC drivers:
com.informix.jdbc.IfxDriver@38af3868 ver: 4.2
--------------
Test [jdbc:informix-sqli://test-informix.testd:9088/multi:informixserver=ol_testifx]
db=com.informix.jdbc.IfxSqliConnect@6d7b4f4c
db.isClosed()=false
SELECT FIRST 1 DBINFO('version','full') FROM systables
IBM Informix Dynamic Server Version 11.50.FC4
JDBC driver version: '4.50.JC11'; major: 4; minor: 50
Test  1:   288 [ms] com.informix.jdbc.IfxSqliConnect@6d7b4f4c
Test  2:    20 [ms] com.informix.jdbc.IfxSqliConnect@63e2203c
...

With the new 15.0 driver I can connect to Informix 14.10 stores demo database

[mn:~/test/tools/javatools/jdbc_connect_test] ./jdbc_connect_test_ifx.sh
OS: Linux 6.12.13-200.fc41.x86_64 amd64
Java version: 21.0.6 Red Hat, Inc.
classpath: bson-5.3.1.jar:jdbc-15.0.0.0.jar:
--------------
JDBC drivers:
com.informix.jdbc.IfxDriver@3af49f1c ver: 4.2
com.informix.jdbc.InformixDriver@7106e68e ver: 15.0
--------------
Test [jdbc:informix-sqli://localhost:9088/stores_demo:INFORMIXSERVER=informix]
db=JDBC Connection #1
db.isClosed()=false
SELECT FIRST 1 DBINFO('version','full') FROM systables
IBM Informix Dynamic Server Version 14.10.FC9W1DE
JDBC driver version: '15.0.0'; major: 15; minor: 0
Test  1:   106 [ms] JDBC Connection #1
Test  2:    17 [ms] JDBC Connection #2
...

With the new 15.0 driver I cannot to Informix 11.50 database:

[mn:~/test/tools/javatools/jdbc_connect_test] ./jdbc_connect_test_ifx.sh
OS: Linux 6.12.13-200.fc41.x86_64 amd64
Java version: 21.0.6 Red Hat, Inc.
classpath: bson-5.3.1.jar:jdbc-15.0.0.0.jar:
--------------
JDBC drivers:
com.informix.jdbc.IfxDriver@3af49f1c ver: 4.2
com.informix.jdbc.InformixDriver@7106e68e ver: 15.0
--------------
Test [jdbc:informix-sqli://test-informix.testd:9088/multi:informixserver=ol_testifx]
db=JDBC Connection #1
db.isClosed()=false
SELECT FIRST 1 DBINFO('version','full') FROM systables
Exception in thread "main" java.lang.IllegalMonitorStateException
    at java.base/java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(ReentrantLock.java:175)
    at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.release(AbstractQueuedSynchronizer.java:1059)
    at java.base/java.util.concurrent.locks.ReentrantLock.unlock(ReentrantLock.java:494)
    at com.informix.jdbc.IfxSqliConnect.unlockSession(IfxSqliConnect.java:2696)
    at com.informix.jdbc.IfxSqli.executeStatementQuery(IfxSqli.java:1239)
    at com.informix.jdbc.IfxResultSet.executeQuery(IfxResultSet.java:132)
    at com.informix.jdbc.IfxStatement.executeQuery(IfxStatement.java:744)
    at com.informix.jdbc.IfxStatement.executeQuery(IfxStatement.java:169)
    at com.informix.jdbc.IfxStatement.executeQuery(IfxStatement.java:157)
    at jdbc_connect_test.showSelectResults(jdbc_connect_test.java:28)
    at jdbc_connect_test.test_connection(jdbc_connect_test.java:55)
    at jdbc_connect_test.main(jdbc_connect_test.java:114)
发布评论

评论列表(0)

  1. 暂无评论