mysql返回集合

今天想利用mysql存储过程返回多条记录,以前用oracle的游标可以直接返回.mysql不支持游标返回

通过找了资料原来可以这么做

CREATE DEFINER=`xxxx`@`%` PROCEDURE `getprizesuminfo`(opid VARCHAR(32),aid INT)
BEGIN
    /**
     * 获取微信活动奖品数量,及参加次数
     * 
     * @author xuyw
     * @email xyw10000@163.com
     * @date 2014-04-02
     */
                    SELECT
  p.id,
  IFNULL((p.prize_actual_sum-l.zjsum),0)    ptotal,
  (SELECT
     COUNT(activityid)    playsum
   FROM wxactivity_prize_log
   WHERE activityid = aid
       AND openid = opid)    playsum
FROM (SELECT
        id,
        prize_actual_sum
      FROM wxactivity_prize
      WHERE wxactivity_id = aid
      ORDER BY id) p
  LEFT JOIN (SELECT
               l.prizeid,
               COUNT(l.prizeid)    zjsum
             FROM wxactivity_prize_log l
             WHERE l.is_prize = 2
                 AND l.activityid = aid
             GROUP BY l.prizeid) l
    ON p.id = l.prizeid;
    END$$

DELIMITER ;

这样就可以直接返回

List list=this.execute(sql,new CallableStatementCallback<List<Object[]>>() {
			@Override
	           public List<Object[]> doInCallableStatement(
	                   CallableStatement cs) throws SQLException,
	                   DataAccessException {
	           	   cs.setString(1, id);
	               cs.setString(2, userid);
	               List<Object[]> objects = new ArrayList<Object[]>();
	              boolean hadResults = cs.execute();   
	                int i=0; 
	                while (hadResults) {   
	                System.out.println("result No:----"+(++i));  
	                 ResultSet rs = cs.getResultSet();   
	                while (rs != null && rs.next()) {  
	                	  ResultSetMetaData rsmd =rs.getMetaData();
		                  int count=rsmd.getColumnCount();
	                      Object[] objArr = new Object[count];  
	                      for (int j = 1; j <= count; j++) {
		                	   objArr[j-1]=rs.getObject(j);
						  }
	                      objects.add(objArr);   
	                 }   
	                hadResults = cs.getMoreResults(); //检查是否存在更多结果集  
	               } 
	               return objects;
	           }
	       });


若不用spring可以这样

cs = con.prepareCall(sql);  
List<Object[]> objects = new ArrayList<Object[]>();
 boolean hadResults = cs.execute(); 
int i=0; while (hadResults) { 
System.out.println("result No:----"+(++i));
 ResultSet rs = cs.getResultSet(); 
while (rs != null && rs.next()) {
Object[] objArr = new Object[3];
                    objArr[0] = rs.getString("id");
                    objArr[1] = rs.getString("ptotal");
                    objArr[2] = rs.getString("playsum");
                    objects.add(objArr);
 } 
hadResults = cs.getMoreResults(); //检查是否存在更多结果集
 }









  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值