这个让我困惑了很长时间,所以我想在这里得到一些帮助:)
我使用JDBC连接到一个古老的Sybase Adaptive Server 6(!!!) 我甚至无法在线找到它的JDBC驱动程序,所以我从安装目录中复制它们:)
现在,插入和查询以及所有其余的db操作都可以正常工作,但在调用存储过程时遇到问题。让我们先从一段代码开始:
CallableStatement loginProcedure = connection.prepareCall("{call Login}");
loginProcedure.executeUpdate();
这是一些正常的程序调用代码。我必须补充一点,登录程序不会采用任何参数,也不会输出任何内容。它唯一能做的就是在名为AiCol的数据库中创建一个varibale。我将很快用程序代码更新这篇文章。
执行上面的代码时,我得到标准语法异常:
com.sybase.jdbc.SybSQLException: ASA Error -131: Syntax error near 'Login'
at com.sybase.tds.Tds.processEed(Tds.java)
at com.sybase.tds.Tds.nextResult(Tds.java)
at com.sybase.jdbc.ResultGetter.nextResult(ResultGetter.java)
at com.sybase.jdbc.SybStatement.nextResult(SybStatement.java)
at com.sybase.jdbc.SybStatement.executeLoop(SybStatement.java)
at com.sybase.jdbc.SybCallableStatement.execute(SybCallableStatement.java)
之前有人遇到过这个问题吗?这是我第一次调用没有IN / OUT参数的存储过程,所以我可能做错了什么:/
提前致谢! / IVO
答案 0 :(得分:0)
只需猜测jConnect Documentation,但您可能需要使用SybCallableStatement。
该演示使用参数,但我会尝试使用executeUpdate调用它。
我当天知道,缺乏Sybase标准的JDBC支持,他们在一段时间内以自己的方式做事。您可能希望查看是否可以跟踪旧的jConnect手册。
我还以为jConnect之前还有另一个Java库。 ASE 6已经很久了!
import com.sybase.jdbcx.*;
....
// prepare the call for the stored procedure to execute as an RPC
String execRPC = "{call " + procName + " (?, ?)}";
SybCallableStatement scs = (SybCallableStatement) con.prepareCall(execRPC);
// set the values and name the parameters
// also (optional) register for any output parameters
scs.setString(1, "xyz");
scs.setParameterName(1, "@p3");
scs.setInt(2, 123);
scs.setParameterName(2, "@p1");
// execute the RPC
// may also process the results using getResultSet()
// and getMoreResults()
// see the samples for more information on processing results
ResultSet rs = scs.executeQuery();