以上错误是在使用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方法不会报错。
这两个错误都是因为指针位置的问题导致的错误,所以当出现这两个错误时,调整一下指针的位置就可以了。理解的不够深入,有问题的地方还请指出。如果有帮助还请支持一下。
