枫叶梨花 2018-02-01 13:59 采纳率: 100%
浏览 2083
已采纳

java调用存储过程时的错误

public static int getNum(){
        Connection conn = null;
        CallableStatement cs =null;
        try {
            conn = JdbcUtils.getConnection();
            cs = conn.prepareCall("{call getNum(?)}");
            cs.registerOutParameter(1, Types.INTEGER);
            cs.execute();
            int num = cs.getInt(1);
            return num;
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if(cs!=null){
                    cs.close(); 
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            JdbcUtils.free(null, null, conn);
        }

        return 0;
    }

这样写总是返回0,如果改成下面那样就对了,这是为什么

    Connection conn = null;
        CallableStatement cs =null;
        try {
            conn = JdbcUtils.getConnection();
            cs = conn.prepareCall("{call getNum(?)}");
            cs.registerOutParameter(1, Types.INTEGER);
            ResultSet result=cs.executeQuery();
            int num = 0;
            if(result.next()){
                num = result.getInt("num");
            }
            return num;
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if(cs!=null){
                    cs.close(); 
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            JdbcUtils.free(null, null, conn);
        }

        return 0;
    }

  • 写回答

6条回答 默认 最新

  • Always_MyLoverX 2018-02-02 01:26
    关注

    1、executeQuery方法是用的最多的,返回的结果集类型常态,例如select语句,取值和你写法差不多,比较固定的

    2、execute方法,返回的结果集比较多样,例如返回多个结果集、多个更新计数或二者组合的语句,看起来更高级,但是非常少用,而且取值非常麻烦。
    关于取值:前提是知道返回类型是getResultSet情况下,必须调用方法 getResultSet 获得第一个结果集,然后调用适当的 getXXX 方法获取其中的值。要获得第二个结果集,需要先调用 getMoreResults 方法,然后再调用 getResultSet 方法。如果已知某个过程返回两个更新计数,则首先调用方法 getUpdateCount,然后调用 getMoreResults,并再次调用 getUpdateCount,

    如果调用的存储过程不知道返回类型,那就更难处理了。只举例resultset取值

    ResultSet  rst=pst.getResultSet();  
    ResultSetMetaData rdata=rst.getMetaData();  
    int count=rdata.getColumnCount();  
    while(rst.next()){  
        for(int i=0;i<count;i++){  
            System.out.print(rst.getString(i+1)+"/t");  
    
        }     
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 SQL Server下载
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题
  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?
  • ¥30 数字电源对DSP芯片的具体要求