最近做一东西,用了很多存储过程。然后,就用到了spring的StoredProcedure执行sql存储过程。但是,我想如果执行存储过程的结果后,返回值不正确的话,就回滚。但是我该在哪加,怎么加代码呢。下面贴出源码:package bk.utils;import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.StoredProcedure;
public class ExecPro extends StoredProcedure {
//  声明一个用于接收结果集的数据结构,其中的元素为row,用map存放 
    public ArrayList<HashMap> alist = new ArrayList<HashMap>();
    private Map inParam;//输入参数 
    /**
     * 结果的处理
     * @author ouming
     */
    public class DemoRowMapper implements RowCallbackHandler {
        public void processRow(ResultSet rs) throws SQLException{
            int rowCount = rs.getRow();
            System.out.println("*******************************************");
            System.out.println("总行数:"+rowCount);
            System.out.println("*******************************************");
            int count = rs.getMetaData().getColumnCount();
            String[] header = new String[count];
            for(int i=0;i<count;i++)
                header[i] = rs.getMetaData().getColumnName(i+1);    //取列名        
            do{                            //这里是先取值再结果集下移,与java的一般写法不同 
                HashMap<String,String> row = new HashMap(count+7);
                for(int i=0;i<count;i++)
                    row.put(header[i],rs.getString(i+1));           //一行记录由列名,值对存入map中
            }while(rs.next());
        }
    }; //DemoRowMapper作为输出参数的回调句柄
    public ExecPro(DataSource ds, String SQL) {
        setDataSource(ds);
        setSql(SQL);
    }
    public void setOutParameter(String column,int type){
        declareParameter(new SqlOutParameter(column, type,new DemoRowMapper()));//利用回调句柄注册输出参数
    }
    public void setParameter(String column,int type){
        declareParameter(new SqlParameter(column, type)); //设置输入输数 
    }
    public void SetInParam(Map inParam){
        this.inParam = inParam;
    }
    public Map execute() {
        compile();//编译 
        return execute(this.inParam);
    }
}下面是调用代码:
package bk.utils;import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import bk.utils.db.DBService;
import bk.utils.ExecPro;
import java.sql.Connection;
/*这里都是存储过程
 */
public class SP{
private static SP convert = null;
private SP(){}
public static SP getInstance(){
if(convert==null){
convert = new SP();
}
return convert;
}
public String auditDJ(String cdh,String shr){
String ret="审核失败!";
ExecPro sp = new ExecPro(DBService.getJdbcTemplate().getDataSource(),"GP_Check");
    sp.setParameter("CDH",java.sql.Types.CHAR);
    sp.setParameter("SHR",java.sql.Types.CHAR);
    sp.setOutParameter("errcode",java.sql.Types.VARCHAR);
    sp.setFunction(false);
//  传入输入参数值 
    Map in = new HashMap();
    in.put("CDH",cdh);
    in.put("SHR",shr);
    sp.SetInParam(in);
//  执行存储过程 
    Map m=sp.execute();
    if(m.containsValue(null)) return ret;
    else ret = m.get("errcode").toString();
    return ret;
}
}