MySQL的reasultSet以及结果集函数AVG

错误

Before start of result set

解决方法

Resultset对象代表sql语句执行的结果集,维护指向其当前数据行的光标。每调用一次next()方法,光标向下移动一行。最初它位于第一行之前,因此第一次调用next()应把光标置于第一行上,使它成为当前行。随着每次调用next()将导致光标向下移动一行。在Resultset对象及其t父辈Statement对象关闭之前,光标一直保持有效。

 

函数AVG

构造review表的软删除方法时,将一条记录软删除的,同时统计review表中该mid的平均值。并将平均值赋值给movie表的grade。更新movie表中的grade值。遇到了问题

符合where为空,select语句中的结果集也带有AVG,导致res.next()不为空,所以if中的判断一直为空。经过调试后发现问题

正确代码如下:

/*
		 * 已软删除review表中记录
		 * 更新movie中相应的grate
		 * flag = 0
		 * 属性值要填满,默认空值也需要
		 * else后处理不存在评论的情况,将movie中的grade置为0
		 * 出现错误:即使查询结果为空,也进入if判断的分支中
		 * 结果集函数AVG
		 * Resultset对象代表sql语句执行的结果集,维护指向其当前数据行的光标。每调用一次next()方法,光标向下移动一行。
		 * 最初它位于第一行之前,因此第一次调用next()应把光标置于第一行上,使它成为当前行。随着每次调用next()将导致光标向下移动一行。
		 * 在Resultset对象及其t父辈Statement对象关闭之前,光标一直保持有效
		 */
		
		res = stmt.executeQuery("select avg(grade) avgGrade from review  where mid ='"+_review.getMid()+"' and flag = 0");
		
	
	    res.next();//指针指向当前查询内容
		System.out.println("影片ID: "+_review.getMid()+" 平均分数: "+res.getFloat("avgGrade"));
			num =stmt.executeUpdate("update movie set grade =  '"+res.getFloat("avgGrade")+"' where mid = '"+_review.getMid()+"'");
		
		System.out.println("已成功执行"+num+"行,更新movie中grade");
		
		bool=true;

 

总结

基础不够扎实,发现问题从根本出发,多撸码多总结

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值