0

我的 JDBC 驱动程序似乎有问题。

我正在尝试执行以下 java 代码:

String sql = "{call get_samp_stud_no_out (?,?,?)}";
CallableStatement call = conn.prepareCall(sql);
call.setInt("objId1", 1);
call.setInt("objId2", 2);
call.setInt("objId3", 3);
ResultSet results = call.executeQuery();

我得到:

java.lang.AbstractMethodError: com.sybase.jdbc2.jdbc.SybCallableStatement.setInt(Ljava/lang/String;I)V

顺便说一句,它是一个 sybase 数据库。我已经尝试过 jconn2.jar 和 jconn3.jar。

和其他接受字符串参数的存储过程:

String sql = "{call get_samp_stud_no_name (?,?,?)}";
    CallableStatement call = conn.prepareCall(sql);
    call.setString("objId1", "nappa");
    call.setString("objId2", "vegeta");
    call.setString("objId3", "frieza");
    ResultSet results = call.executeQuery();

例外情况是:

Exception in thread "main" java.lang.AbstractMethodError: com.sybase.jdbc2.jdbc.SybCallableStatement.setString(Ljava/lang/String;Ljava/lang/String;)V
4

2 回答 2

0

在 Sybase 驱动程序中,命名参数存在很多问题,我认为这会导致您的问题。
尝试:

call.setString("@objId1", "nappa");
call.setString("@objId2", "vegeta");
call.setString("@objId3", "frieza");

或者

call.setString(1, "nappa");
call.setString(2, "vegeta");
call.setString(3, "frieza");
于 2012-10-11T10:41:50.073 回答
0

尝试像这样修改您的代码:

String sql = "{?=call get_samp_stud_no_out (?,?,?)}";
CallableStatement call = conn.prepareCall(sql);

call.registerOutParameter(1, Types.INTEGER);
call.setInt(2, 10);
call.setInt(3, 20);
call.setInt(4, 30);
call.execute();
int retVal = call.getInt(1); // return value
call.close();
于 2012-10-11T10:47:54.777 回答