错误

Before start of result set

解决方法

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

 

函数AVG

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

MySQL的reasultSet以及结果集函数AVG

符合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;

 

总结

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

 

 

 

 

 

 

 

 

 

相关文章:

  • 2021-05-18
  • 2021-11-24
  • 2021-10-28
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-10-13
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-10
相关资源
相似解决方案