为什么ResultSet的getInt一定要包括在if rs.next()里面?

sql = "insert into news_base(fid,title,date,author) values("+fid+",'"+title+"','"+dateValue+"','Admin')";
            statement = connection.createStatement();
            statement.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
            ResultSet rs = statement.getGeneratedKeys();
            if(rs.next()){
                System.out.println(rs.getInt(1));
            }

以上代码是 正常的。。
但是System.out.println(rs.getInt(1));把if rs.next() 去掉
就报错 java.sql.SQLException: Before start of result set
刚学java不久 求java高手讲解
之前一直写的是js,可能思想不一样

阅读 3.2k
2 个回答

可以把 ResultSet 理解为 带头结点的单向链表,初始时 指针 指向头结点next() 方法就是用来将 指针 向后移动一个位置 —— 如果该位置有数据,那么 next() 返回 true,否则返回 false。一般在数据库操作中,我们把这个 “指针” 称作 “游标”。
所以,如果你不写 if (rs.next()),那么第一次使用 rs 也就没有调用 rsnext() 方法,那么此时游标就处于 “头结点” 的位置,但是 “头结点” 只是一个标识,是没有数据的,因而抛出了异常。

你获得的结果集游标默认指向第一行之前,如果不使用next方法将它指向第一行的话是什么都得不到的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题