public ResultItem findBaseVendorDepositAccountant(GenericModel model) {

CallableStatement cstmt = null;
ResultSet rs = null;
ResultItem resultItem = new ResultItem();

String strSql = "{call SP_ACNT_BASE031R(?,?,?,?,?)}";

         
try {
cstmt = prepareCall(strSql);


cstmt.setString(1, (String) model.get("rowStatus"));   //row status
cstmt.setString(2, (String) model.get("vendCd"));       

cstmt.registerOutParameter(3, OracleTypes.CURSOR);
cstmt.registerOutParameter(4, OracleTypes.INTEGER);
cstmt.registerOutParameter(5, OracleTypes.VARCHAR);
cstmt.execute();

rs = (ResultSet) cstmt.getObject(3); resultItem.setValue(rs, 0, 0, ResultItem.NOTRIM);
//log.info("================>" + resultItem.getRowSize()); } catch (SQLException e) {
throw translateException(strSql, e); } finally {
JdbcUtils.closeStatement(cstmt);
JdbcUtils.closeResultSet(rs);
} return resultItem;
}希望每段代码都能详细说说看看~是菜鸟..谢谢

解决方案 »

  1.   

    唔... ...
    这是一段java代码,
    每一行都是java语句,
    就是这样<( ̄︶ ̄)/
      

  2.   

    调用存储过程
    1、2参数是in,setString赋值
    3、4、5参数是out,registerOutParameter注册参数类型
    cstmt.getObject是获得返回的out参数虽然代码比较简单,不过,很实用
      

  3.   

    补充一下楼上的
              cstmt.setString(1, (String) model.get("rowStatus"));   //获取输入参数rowStatus 
             cstmt.setString(2, (String) model.get("vendCd"));      //获取输入参数vendCd
                            
                cstmt.registerOutParameter(3, OracleTypes.CURSOR);  //设置输入数据类型为游标
                cstmt.registerOutParameter(4, OracleTypes.INTEGER); //设置输入数据类型为整形
                cstmt.registerOutParameter(5, OracleTypes.VARCHAR); //设置输入数据类型为字符串
            
      

  4.   


    //此方法主要根据一个GenericModel对象实例model作为查询条件
    //返回一个ResultItem对象
    public ResultItem findBaseVendorDepositAccountant(GenericModel model) {
            
            CallableStatement cstmt = null;//父接口是PreparedStatement,具体有什么方法,方法的作用可以去看API
            ResultSet rs = null;
            ResultItem resultItem = new ResultItem();
            
            String strSql = "{call SP_ACNT_BASE031R(?,?,?,?,?)}";//调用ORACLE的一个过程
            
             
            try {
                cstmt = prepareCall(strSql);
                
                
                cstmt.setString(1, (String) model.get("rowStatus"));   //row status
                cstmt.setString(2, (String) model.get("vendCd"));   //从model取出对应值绑定到sql上    
                            
                cstmt.registerOutParameter(3, OracleTypes.CURSOR);
                cstmt.registerOutParameter(4, OracleTypes.INTEGER);
                cstmt.registerOutParameter(5, OracleTypes.VARCHAR);
                        cstmt.execute();
                
                rs = (ResultSet) cstmt.getObject(3);            resultItem.setValue(rs, 0, 0, ResultItem.NOTRIM);
                //log.info("================>" + resultItem.getRowSize());        } catch (SQLException e) {
                throw translateException(strSql, e);        } finally {
                JdbcUtils.closeStatement(cstmt);
                JdbcUtils.closeResultSet(rs);
            }        return resultItem;        
        }
      

  5.   

    调用存储过程的一个java方法。。至于里面的某些语句不明白,去百度一下 “jdbc 存储过程”
      

  6.   

    以一个GenericModel对象实例model作为查询条件调用一个sql函数,得到所需要的查询结果,其中的参数属性可以参考sql使用手册,不知道楼主想问的是什么。
      

  7.   

    补充楼上的//此方法主要根据一个GenericModel对象实例model作为查询条件
    //返回一个ResultItem对象
    public ResultItem findBaseVendorDepositAccountant(GenericModel model) {
            
            CallableStatement cstmt = null;//父接口是PreparedStatement,具体有什么方法,方法的作用可以去看API
            ResultSet rs = null;
            ResultItem resultItem = new ResultItem();
            
            String strSql = "{call SP_ACNT_BASE031R(?,?,?,?,?)}";//调用ORACLE的一个过程
            
             
            try {
                cstmt = prepareCall(strSql);
                  cstmt.setString(1, (String) model.get("rowStatus"));  //设置SQL语句的参数rowStatus 
                cstmt.setString(2, (String) model.get("vendCd"));    //设置SQL语句的参数vendCd 
                cstmt.registerOutParameter(3, OracleTypes.CURSOR);  //设置输入数据类型为游标 
                  cstmt.registerOutParameter(4, OracleTypes.INTEGER); //设置输入数据类型为整形 
                  cstmt.registerOutParameter(5, OracleTypes.VARCHAR); //设置输入数据类型为字符串             cstmt.execute();//执行SQL语句,即是存储过程
                
                rs = (ResultSet) cstmt.getObject(3);//取结果集            resultItem.setValue(rs, 0, 0, ResultItem.NOTRIM);//保存结果集
                //log.info("================>" + resultItem.getRowSize());        } catch (SQLException e) {
                throw translateException(strSql, e);        } finally {//关闭数据库连接
                JdbcUtils.closeStatement(cstmt);
                JdbcUtils.closeResultSet(rs);
            }        return resultItem;//返回结果集        
        }
      

  8.   

       rs = (ResultSet) cstmt.getObject(3);            resultItem.setValue(rs, 0, 0, ResultItem.NOTRIM);不太明白这2句代码
    它为什么getObject(3)
    3不是游标类型吗怎么会获得结果集的呢?