今天第一次在java中调用数据库的存储过程,直接上代码
public void insertSql(String taskCode, String exeSql)
throws Exception{
java.sql.Connection conn = null;
CallableStatement call = null;
String sql = "{call reinscheckdata.insertsql(?,?)}";
DBManager dbManager = new DBManager();
BLCheckresultAction blCheckresultAction = new BLCheckresultAction();
try{
dbManager.open("ddccDataSource");
conn = dbManager.getConnection();
dbManager.beginTransaction();
//为存储过程传参
call = conn.prepareCall(sql);
call.setString(1, exeSql);
call.setString(2, taskCode);
call.registerOutParameter(3, Types.VARCHAR);
call.execute();
String flag = call.getString(3);
System.out.println("返回参数"+flag);
if("0".equals(flag)){
dbManager.commitTransaction();
}else{
dbManager.rollbackTransaction();
}
}catch(Exception exception){
dbManager.rollbackTransaction();
throw exception;
}finally{
dbManager.close();
}
}
在执行的时候报错
registerOutParameter无效的索引名
后来通过网上的例子对比发现问题在这里
String sql = "{call reinscheckdata.insertsql(?,?)}";
只给了传参的“?”,少了一个接收存储过程返回值的“?”,所以才会报错。