我在尝试访问此返回的 resultSetCustomer.from 其他方法时遇到错误 "java.sql.SQLException: After end of result set"
I am getting error "java.sql.SQLException: After end of result set" while trying to access this returned resultSetCustomer.from other methode
public ResultSet getAllCustomer() throws SQLException{
//List L = new ArrayList();
try {
stm = con.prepareStatement("select * from customer");
resultSetSubject = stm.executeQuery();
while (resultSetCustomer.next()) {
//L.add(resultSetCustomer);
resultSetCustomer.getInt(1);
resultSetCustomer.getString(2);
//System.out.println(resultSetCustomer.getInt("id")+" "+resultSetCustomer.getString("name"));
}
} catch (Exception e) {
System.out.println(e);
}
return resultSetCustomer;
}
让我简单介绍一下,我正在从客户 table 获取所有记录并作为结果集返回。我正在访问返回的结果集
结果集 rs = T.getAllCustomer();
System.out.println(rs.getInt("id")+" "+rs.getString("name"));
您的代码中存在几个问题:
您正在获取一个 ResultSet
对象,遍历其中的所有行,获取列值,然后 returning 这个 ResultSet
对象.当它被 returned 给调用者时,它已经被处理行的循环消耗掉了(这是你问题中错误的原因)。
不要 return ResultSet
对象,而是创建一个映射到数据库中数据的 Customer
实体 class,并且return Customer
的实例。返回一个 ResultSet
对象真的很糟糕,因为它无法控制对象的关闭方式,也不会使您的代码面向对象。
如果您没有参数化查询,则无需创建准备好的语句。
Statement
(和 ResultSet
)必须在 close
d 后完成。您应该将处理整个结果的代码包装在 try-with-resources
statement.
中
您的代码几乎不需要修改
1 > 确保您使用的结果集变量与定义的相同(代码中有一处不同)。
2> 仅使用
public ResultSet getAllCustomer() throws SQLException{
try {
stm = con.prepareStatement("select * from customer");
resultSetCustomer = stm.executeQuery();
} catch (Exception e) {
System.out.println(e);
}
return resultSetCustomer;
}
3> 在单独的方法中关闭你的 connection/resultset/statement 否则你会得到错误。你可以使用如下
public void close() throws SQLException{
if (resultSetCustomer != null) {
resultSetCustomer .close();
}
if (stm !=null) {
stm.close();
}
}
4> 在访问时使用结果集(您的结果集实例).next()
public ResultSet getAllCustomer() throws SQLException{
//List L = new ArrayList();
try {
stm = con.prepareStatement("select * from customer");
resultSetSubject = stm.executeQuery();
while (resultSetCustomer.next()) {
//L.add(resultSetCustomer);
resultSetCustomer.getInt(1);
resultSetCustomer.getString(2);
//System.out.println(resultSetCustomer.getInt("id")+" "+resultSetCustomer.getString("name"));
}
} catch (Exception e) {
System.out.println(e);
}
return resultSetCustomer;
}
让我简单介绍一下,我正在从客户 table 获取所有记录并作为结果集返回。我正在访问返回的结果集
结果集 rs = T.getAllCustomer();
System.out.println(rs.getInt("id")+" "+rs.getString("name"));
您的代码中存在几个问题:
您正在获取一个
ResultSet
对象,遍历其中的所有行,获取列值,然后 returning 这个ResultSet
对象.当它被 returned 给调用者时,它已经被处理行的循环消耗掉了(这是你问题中错误的原因)。不要 return
ResultSet
对象,而是创建一个映射到数据库中数据的Customer
实体 class,并且returnCustomer
的实例。返回一个ResultSet
对象真的很糟糕,因为它无法控制对象的关闭方式,也不会使您的代码面向对象。如果您没有参数化查询,则无需创建准备好的语句。
中Statement
(和ResultSet
)必须在close
d 后完成。您应该将处理整个结果的代码包装在try-with-resources
statement.
您的代码几乎不需要修改
1 > 确保您使用的结果集变量与定义的相同(代码中有一处不同)。
2> 仅使用
public ResultSet getAllCustomer() throws SQLException{
try {
stm = con.prepareStatement("select * from customer");
resultSetCustomer = stm.executeQuery();
} catch (Exception e) {
System.out.println(e);
}
return resultSetCustomer;
}
3> 在单独的方法中关闭你的 connection/resultset/statement 否则你会得到错误。你可以使用如下
public void close() throws SQLException{
if (resultSetCustomer != null) {
resultSetCustomer .close();
}
if (stm !=null) {
stm.close();
}
}
4> 在访问时使用结果集(您的结果集实例).next()