我的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
答案 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();