jdbc,if(res.next)判断结果失败

在执行SQL查询时,预期存在结果,但在使用res.next()判断时未执行内部语句。问题根源在于:1) varchar类型变量缺少单引号导致结果为空;2) 单引号与变量间有空格,使得查询条件变为= ' 182',这也会导致查询无结果。需注意SQL语句的正确构建。

查询应该有结果的,却if(res.next)里面的语句却没有执行

花了很长时间,究其原因,

1  varchar类型的变量,没有单引号,结果为空,

2  单引号与变量之间不能有空格,不然是=‘   182’这样查询结果也是空,

错误的:

	res = sql.executeQuery(" select  id  from  user  where  id = "
					+ registerId+ ";");
错误的:

	res = sql.executeQuery(" select  id  from  user  where  id = '  "///有空格则错误
					+ registerId+ ";");


正确的:

		res = sql.executeQuery(" select  id  from  user  where  id = '"///有单引号,无空格
					+ registerId+ "';");

mysql表结构:

mysql> show  columns from  user;
+----------------+-------------+------+-----+---------
D:\JAVA\jdk\bin\java.exe "-javaagent:D:\IDEA\IntelliJ IDEA 2023.3.4\lib\idea_rt.jar=51321:D:\IDEA\IntelliJ IDEA 2023.3.4\bin" -Dfile.encoding=UTF-8 -classpath D:\code\java\javaweb\javaweb3\out\production\javaweb3;D:\code\java\javaweb\javaweb3\lib\mysql-connector-java-8.0.15.jar;D:\code\java\javaweb\javaweb3\lib\druid-1.1.12.jar com.hz.jdbc03.utils.Test java.sql.SQLSyntaxErrorException: In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'lianxi2.a.subject'; this is incompatible with sql_mode=only_full_group_by at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:970) at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:1020) at com.hz.jdbc03.dao.DBUtils.query(DBUtils.java:52) at com.hz.jdbc03.dao.impl.StudentUserImpl.findAll(StudentUserImpl.java:111) at com.hz.jdbc03.utils.Test.main(Test.java:54) java.lang.NullPointerException: Cannot invoke "java.sql.ResultSet.next()" because "rs" is null at com.hz.jdbc03.dao.impl.StudentUserImpl.findAll(StudentUserImpl.java:114) at com.hz.jdbc03.utils.Test.main(Test.java:54) java.lang.NullPointerException: Cannot invoke "java.sql.ResultSet.close()" because "rs" is null at com.hz.jdbc03.dao.impl.StudentUserImpl.findAll(StudentUserImpl.java:126) at com.hz.jdbc03.utils.Test.main(Test.java:54) List<StudentUsermax> list = stuDents.findAll(); for (StudentUsermax studentUsermax : list) { System.out.println(studentUsermax); } package com.hz.jdbc03.dao.impl; import com.hz.jdbc03.dao.DBUtils; import com.hz.jdbc03.dao.StuDents; import com.hz.jdbc03.pojo.StudentUser; import com.hz.jdbc03.pojo.StudentUsermax; import com.hz.jdbc03.pojo.StudentUserresult; import java.sql.*; import java.util.ArrayList; import java.util.List; //实现接口 public class StudentUserImpl implements StuDents{ DBUtils dbUtils = new DBUtils(); public int addStudent(StudentUser studentUser) { String sql = "INSERT INTO student (studentNo, studentName, loginPwd, gender, gradeId, phone, address, bornDate, email) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)"; return dbUtils.update(sql,studentUser.getStudentNo(), studentUser.getStudentName(), studentUser.getLoginPwd(), studentUser.getGender(), studentUser.getGradeId(), studentUser.getPhone(), studentUser.getAddress(), studentUser.getBornDate(), studentUser.getEmail()); } @Override public int updatePwd(int studentId, String loginPwd) { String sql = "UPDATE student SET loginPwd = ? WHERE studentId = ?"; return dbUtils.update(sql,loginPwd,studentId); } public void findStudent(String studentName, String studentpwd){ String sql = "select a.* from student a join grade b on a.gradeId = b.gradeId where studentName = ? and loginPwd = ?"; ResultSet rs = dbUtils.query(sql,studentName,studentpwd); try { if(rs.next()){ StudentUser stu = new StudentUser(); stu.setStudentid(rs.getInt("studentId")); stu.setStudentName(rs.getString("studentName")); stu.setLoginPwd(rs.getString("loginPwd")); stu.setGender(rs.getString("gender")); stu.setGradeId(rs.getInt("gradeId")); stu.setPhone(rs.getString("phone")); stu.setAddress(rs.getString("address")); stu.setBornDate(rs.getString("bornDate")); stu.setEmail(rs.getString("email")); System.out.println(stu); } } catch (Exception e) { e.printStackTrace(); }finally { try { rs.close(); } catch (Exception e) { e.printStackTrace(); } } } public void delete(int[] studentId){ try { dbUtils.conn.setAutoCommit(false); String sql = "delete from student where studentId = ?"; PreparedStatement ps = dbUtils.conn.prepareStatement(sql); for (int id : studentId) { ps.setInt(1, id); ps.addBatch(); ps.executeBatch(); dbUtils.conn.commit(); if(dbUtils.ps != null){ dbUtils.ps.close(); } } } catch (Exception e) { e.printStackTrace(); }finally { dbUtils.close(); } } public List<StudentUsermax> findAll( ){ List<StudentUsermax> list = new ArrayList<>(); String sql = "SELECT \n" + " a.subject AS k_name, \n" + " b.studentName AS name_a, \n" + " a.examDate AS time,\n" + " max(a.studentResult) AS max_a\n" + " FROM result a \n" + " LEFT JOIN student b ON a.studentNo = b.studentNo\n" + " LEFT JOIN (SELECT studentNo, `subject`, MAX(studentResult) AS max_res\n" + " FROM result \n" + " GROUP BY studentNo, `subject` \n" + " )temp ON a.studentNo = temp.studentNo \n" + " AND a.`subject` = temp.`subject` \n" + " AND a.studentResult = temp.max_res\n" + " WHERE temp.studentNo IS NOT NULL;"; ResultSet rs = dbUtils.query(sql,null); List<StudentUsermax> list1 = new ArrayList<>(); try { while(rs.next()){ StudentUsermax max = new StudentUsermax(); max.setSubject(rs.getString("k_name")); max.setStudentName(rs.getString("name_a")); max.setStudentResult(rs.getInt("max_a")); max.setExamDate(rs.getString("time")); list1.add(max); } } catch (Exception e) { e.printStackTrace(); }finally { try { rs.close(); } catch (Exception e) { e.printStackTrace(); } } return list; } }
最新发布
07-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二十六画生的博客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值