使用jdbc怎样获得一个sql存储过程的返回值

解决方案 »

  1.   

    ??? public List getDailyEScheduleInfo(int deptcode,ProcReturn p){
    ????? List alllist=new ArrayList();
    ????? Connection conn = null;
    ????? CallableStatement stmt = null;
    ????? ResultSet rs = null;
    ????? String lsstr="";
    ????? try{
    ??????? db_sqlserver dataAccess = new db_sqlserver();
    ??????? conn = dataAccess.getConnection();
    ??????? //准备SQL语句
    ??????? String strSQL = "{call SP_GetDeptRegInfo(?)}";
    ??????? //准备可调用语句对象
    ??????? stmt = conn.prepareCall(strSQL);
    ??????? stmt.setInt(1,deptcode);
    ??????? //执行该存储过程并返回结果集
    ??????? stmt.execute();
    ??????? //得到字段字符串列表,格式为 [字段1][字段2][字段3]
    ??????? rs = stmt.getResultSet();
    ??????? ResultSetMetaData md = rs.getMetaData();
    ??????? int rsCount = md.getColumnCount();
    ??????? if (!(rsCount==0)){
    ??????? lsstr = String.valueOf((rsCount-7)/2)+"|";
    ??????? }
    ??????? Boolean isExec = Boolean.FALSE;
    ??????? while (rs.next()){
    ??????????? Map map = new HashMap();
    ??????????? for (int i = 1; i <= rsCount; i++){
    ????????????? map.put(md.getColumnName(i), rs.getObject(i));
    ????????????? //得到动态增加的字段列表
    ????????????? if ((i>7) & !isExec){
    ???????????????? if (!(md.getColumnName(i).indexOf("名称") >0)){
    ???????????????? lsstr=lsstr+md.getColumnName(i)+"|";}
    ????????????? }
    ??????????? }
    ??????????? alllist.add(map);
    ??????????? isExec = Boolean.TRUE;
    ??????? }
    ?????? p.setVarchar(lsstr);
    ?????? //获取返回的结果集
    ???? }catch(SQLException ex){
    ?????????? ex.printStackTrace();
    ??????? }finally{
    ??????? try{
    ????????? rs.close();
    ????????? stmt.close();
    ????????? conn.close();
    ??????? }catch(SQLException ex1){
    ??????? }
    ????? }
    ????? return alllist;
    ???? }