Java中的可调用语句不起作用

时间:2012-10-11 10:21:59

标签: java jdbc sybase

我的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

BTW是一个sybase数据库。 我试过了jconn2.jar和jconn3.jar。

和其他接受String参数的存储过程:

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

2 个答案:

答案 0 :(得分: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");

答案 1 :(得分: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();