我觉得这个错误类似与空指针异常。
出现这个错误是处理了空的结果集。
部分代码如下:
public Project findByProjectName(Project project) {
// TODO Auto-generated method stub
try {
Connection conn = DBUtiles.getConnection();
String sql = "select p.* from project as p left join user as u on u.u_id=p.user_id where p.projectName=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, project.getProjectName());
ResultSet rs = ps.executeQuery();
// 根据名字返回 对象,如果查到了就全部写回对象 没有查到 返回空对象,表的每一条数据都是id 如果id=0 说明未查到。
rs.next();
if (rs.getInt(1) != 0) {
project.setP_id(rs.getInt(1));
project.setProjectName(rs.getString(2));
project.setProjectStatus(rs.getInt(3));
project.setUser_id(rs.getInt(4));
return project;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return new Project();
}
当返回查询的结果是空集的时候rs.next()打印出来显示的是false,这时候再去执行rs.getInt(1)!=0 当然就会出错了,这个就好像我们要去判断查询的一个结果名是否要和一个字符串相等,比如返回了一个project对象,我们不知道这个project对象到底是不是为空 这个时候如果你用project.getproName().equals(“zhangke”);的话 很容易出现空指针异常,因为如果project返回的是一个空对象的话,get到的name也是为空的,调用空字符串的equals方法,当然出现空指针异常,所以常常代码是写成
“zhangke”.equals(project.getproName());这样的话 就避免出现空指针异常了。
SQLException:Illegal operation on empty result set. 出现此错误的原因是调用了空返回集的方法。