Java报错:java.sql.SQLException: After end of result set(Before start of result set)

it2026-02-21  7

以上错误是在使用ResultSet接口的get方法获取相应SQL类型的值时出现的错误,都是因为指针位置导致的错误。

原因:

After end of result set (结果集结束后)

顾名思义,根据这句话的意思我们很容易理解,也就是现在指针的位置是在结果集最后一行之后,没有指向任何数据,所以调用get方法时报错。

Before start of result set (结果集开始前)

和上面的错误是类似的,也就是现在指针的位置在结果集的第一行之前,没有指向任何数据,所以报错。

举两个例子:

1.报错:After end of result set

try { PreparedStatement stm = conn.prepareStatement("select * from info where name=? and password=? "); stm.setString(1, username); stm.setString(2, password); sul = stm.executeQuery(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { while(sul.next()) { System.out.println(sul.getString("name")); } } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { sul.getString("name"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }

当我执行此代码的时候,倒数第5行是会报错After end of result set的,因为在我执行此语句之前,我前面执行了while循环,当循环完成之后,此时我的指针是在结果集末尾的,也就是结果集最后一行之后,没有指向任何数据所以报错。

2.报错:Before start of result set

try { PreparedStatement stm = conn.prepareStatement("select * from info where name=? and password=? "); stm.setString(1, username); stm.setString(2, password); sul = stm.executeQuery(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { sul.getString("name"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }

执行此代码倒数第5行会报错Before start of result set,因为指针最初位于第一行之前,没有指向任何数据,所以调用get方法报错。

try { PreparedStatement stm = conn.prepareStatement("select * from info where name=? and password=? "); stm.setString(1, username); stm.setString(2, password); sul = stm.executeQuery(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { sul.next(); sul.getString("name"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }

如果在倒数第5行之前加上语句:sul.next(),程序会完美执行,因为此语句将指针移到下一行,也就是第一行,指针指向数据,所以调用get方法不会报错。

结语:

这两个错误都是因为指针位置的问题导致的错误,所以当出现这两个错误时,调整一下指针的位置就可以了。理解的不够深入,有问题的地方还请指出。如果有帮助还请支持一下。

最新回复(0)