标签: jconnect

从 JDBC 执行 Sybase 过程时出现问题

从 JDBC 执行 Sybase 过程时,出现以下错误:

执行游标是在包含非 SELECT 或带有 COMPUTE 子句的 SELECT 的过程上声明的。为了使这个游标的声明合法,它应该有一个没有计算子句的选择语句

我正在使用 JCONN4 sybase jar。sybase 是否对程序有这样的限制,没有带有计算子句的选择语句?

我也在 Sybase 文档中搜索过,但没有得到正确的答案。

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.39996_1250/html/svrtsg/svrtsg348.htm

我不能在这里发布程序,但我可以发布示例

create proc sample (@value_date datetime = null) as
begin 
if @value_date is null 
  select @value_date  = some_column from some_table

select a,b,c,d into #ad
from 
 table_a where a='something'

select a,b,c,d case when a=0 then 0 else b/a
from #ad

end
Run Code Online (Sandbox Code Playgroud)

使用 sybStatemt.executeQuery 函数调用上述过程

看起来像它的 Sybase 错误。重现问题的步骤

  1. 如上所述,创建一个使用计算子句进行选择的过程

  2. 编写jdbc程序并使用belew方法 statement.setFetchSize(1000);

  3. 执行程序,你会看到错误

现在的问题是 Sybase 真的有这些限制,还是只针对他们的驱动程序,我们可以说它的驱动程序问题?

java sybase jdbc jconnect

7
推荐指数
1
解决办法
500
查看次数

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

我使用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 …
Run Code Online (Sandbox Code Playgroud)

java jconnect cursor sybase-ase apache-metamodel

6
推荐指数
0
解决办法
527
查看次数

Sybase IN和OUT参数

我很疯狂Sybase JDBC驱动程序如何使用mixed INOUTparameters 处理存储过程.看看这个简单的存储过程:

CREATE OR REPLACE PROCEDURE p (IN i1 INT, OUT o1 INT, IN i2 INT, OUT o2 INT)
BEGIN
    set o1 = i1;
    set o2 = i2;
END
Run Code Online (Sandbox Code Playgroud)

以下是我用JDBC调用它的方法:

CallableStatement c = connection.prepareCall("{ call dba.p(?, ?, ?, ?) }");
c.setInt(1, 1);
c.setInt(3, 2);
c.registerOutParameter(2, Types.INTEGER);
c.registerOutParameter(4, Types.INTEGER);
c.execute();
System.out.println(c.getObject(2));
System.out.println(c.getObject(4));
Run Code Online (Sandbox Code Playgroud)

但这导致了

1
null
Run Code Online (Sandbox Code Playgroud)

这是怎么回事??这是JDBC驱动程序中的一个非常邪恶的错误还是我完全错过了什么?通过反复试验,我发现这是一种工作方式:

c.setInt(1, 1);
c.setInt(2, 2);
c.registerOutParameter(3, Types.INTEGER);
c.registerOutParameter(4, Types.INTEGER);
c.execute();
System.out.println(c.getObject(3));
System.out.println(c.getObject(4));
Run Code Online (Sandbox Code Playgroud)

现在的结果是

1
2
Run Code Online (Sandbox Code Playgroud)

JDBC驱动程序是否秘密重新排序INOUT参数?

我正在使用SQL …

stored-procedures jdbc sqlanywhere jconnect out-parameters

5
推荐指数
2
解决办法
1万
查看次数

为什么 MySQL JDBC 不使用“启动事务”查询来启动事务?

我有一个 Java 应用程序,它使用 JTA(Apache Geronimo)来管理事务。使用的数据库是 MySQL。应用程序有很多开始和提交方法。但是,查看 MySQL 常规日志时,我找不到单个“开始事务”查询/命令。该日志已满的SET autocommit=1,并SET autocommit=0commitrollback。因此,查看日志我无法确定事务开始的时间。我不是 Java 人,我也找不到任何有关此的帮助资源。

java mysql jta jdbc jconnect

2
推荐指数
1
解决办法
1250
查看次数

jconn4.jar 的 Maven 存储库是什么?

jConn3 是我唯一能找到的。

'com.sybase.jdbc3.jdbc:jconn3:6.05'

java sybase jconnect maven

2
推荐指数
1
解决办法
4万
查看次数