在多线程环境中执行SELECT Query时,Sybase抛出异常"已有另一个名为XXX的游标"

Ash*_*oli 6 java jconnect cursor sybase-ase apache-metamodel

我使用ApacheMetaModelExtract从数据Sybase ASE 15.5 的数据库,Windows 7的计算机上安装.我是在多线程环境中将数据提取到CSV中.我使用这些开源库

        <dependency>
            <groupId>com.sybase</groupId>
            <artifactId>jconn4</artifactId>
            <version>4.0</version>
        </dependency>
        <dependency>
            <groupId>com.sybase</groupId>
            <artifactId>DDLGen</artifactId>
            <version>4.0</version>
        </dependency>
        <dependency>
            <groupId>com.sybase</groupId>
            <artifactId>dsparser</artifactId>
            <version>4.0</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

我在尝试执行SELECT查询时收到错误.它不会为任何特定查询抛出异常.它可以为任何表抛出异常.我正在尝试使用创建查询Apache Meta-model DataContext.

Query query = dataContext.query().from(table).as("ct").selectAll().toQuery();
dataContext.executeQuery(query).iterator();
Run Code Online (Sandbox Code Playgroud)

上面的代码将创建如下查询:

SELECT ct."Column1", ct."Column2", ct."Column3", ct."Column4", ct."Column5", ct."Column6", ct."Column7", ct."Column8", ct."Column9", ct."id" FROM schemaowner."tablename" ct
Run Code Online (Sandbox Code Playgroud)

以下是堆栈跟踪:

! com.sybase.jdbc4.jdbc.SybSQLException: There is already another cursor with the name 'jconnect_implicit_134' at the nesting level '0'.

! 

! at com.sybase.jdbc4.tds.Tds.processEed(Tds.java:4117) ~[jconn4-4.0.jar:JDK 1.6/jdbcmain/Thu Apr 30 04:18:00 PDT 2015]

! at com.sybase.jdbc4.tds.Tds.nextResult(Tds.java:3207) ~[jconn4-4.0.jar:JDK 1.6/jdbcmain/Thu Apr 30 04:18:00 PDT 2015]

! at com.sybase.jdbc4.tds.Tds.getResultSetResult(Tds.java:3973) ~[jconn4-4.0.jar:JDK 1.6/jdbcmain/Thu Apr 30 04:18:00 PDT 2015]

! at com.sybase.jdbc4.tds.TdsCursor.open(TdsCursor.java:328) ~[jconn4-4.0.jar:JDK 1.6/jdbcmain/Thu Apr 30 04:18:00 PDT 2015]

! at com.sybase.jdbc4.jdbc.SybStatement.executeQuery(SybStatement.java:2604) ~[jconn4-4.0.jar:JDK 1.6/jdbcmain/Thu Apr 30 04:18:00 PDT 2015]

! at com.sybase.jdbc4.jdbc.SybStatement.executeQuery(SybStatement.java:555) ~[jconn4-4.0.jar:JDK 1.6/jdbcmain/Thu Apr 30 04:18:00 PDT 2015]

! at org.eobjects.metamodel.jdbc.JdbcDataContext.execute(JdbcDataContext.java:381) ~[MetaModel-jdbc-3.4.7.jar:na]

! at org.eobjects.metamodel.jdbc.JdbcDataContext.executeQuery(JdbcDataContext.java:438) ~[MetaModel-jdbc-3.4.7.jar:na]

! Causing: org.eobjects.metamodel.MetaModelException: Could not execute query: There is already another cursor with the name 'jconnect_implicit_134' at the nesting level '0'.

! 

! at org.eobjects.metamodel.jdbc.JdbcUtils.wrapException(JdbcUtils.java:70) ~[MetaModel-jdbc-3.4.7.jar:na]

! at org.eobjects.metamodel.jdbc.JdbcDataContext.executeQuery(JdbcDataContext.java:444) ~[MetaModel-jdbc-3.4.7.jar:na]
Run Code Online (Sandbox Code Playgroud)