JDBC使用ResultSet插入新行

时间:2015-10-15 20:41:06

标签: java jdbc

我有几个关于JDBC使用ResultSet插入新行的问题。你能看一下吗?感谢。

在K& B7页面895中,有一个示例代码如下:

1 String query = "SELECT AuthorID, FirstName, LastName FROM Author";
2 ResultSet rs = stmt.executeQuery(query);
3 rs.next();
4 rs.moveToInsertRow();
5 rs.updateInt("AuthorID", 1055);
6 rs.updateString("FirstName", "Tom");
7 rs.updateString("LastName", "McGinn");
8 rs.insertRow();
9 rs.moveToCurrentRow();

问题1:我可以删除第3行,以便在将光标移动到插入行之前光标指向第一行的上方吗?这是允许的吗?

问题2:执行第8行后,数据库中插入的新行在哪里?它是否总是作为最后一行附加在数据库的末尾,无论光标在移动到插入行之前光标指向结果集的位置?

问题3:执行第8行后,如果我想插入另一行,我是否需要添加另一行" rs.moveToInsertRow();"在代码?

问题4:在第7行和第8行之间,如果我添加一个新行" rs.next();",这会导致在运行时抛出SQLException,因为next()方法不是当光标在插入行中时允许?

1 个答案:

答案 0 :(得分:2)

  

问题1:我可以删除第3行,以便在将光标移动到插入行之前光标指向第一行的上方吗?这是允许的吗?

是。另请注意,查询可能返回零行,在这种情况下,无论如何都无法成功推进游标。

  

问题2:执行第8行后,数据库中插入的新行在哪里?它是否总是作为最后一行附加在数据库的末尾,无论光标在移动到插入行之前光标指向结果集的位置?

“数据库中的位置?”这不是一个有意义的问题。如果您的意思是“结果集中的位置”,答案很可能无处ResultSet为您提供了将行插入数据库的方法,但执行查询时,任何此类行都不能存在于结果中。

  

问题3:执行第8行后,如果我想插入另一个新行,是否需要添加另一行“rs.moveToInsertRow();”在代码?

没有

  

问题4:在第7行和第8行之间,如果我添加一个新行“rs.next();”,这会导致在运行时抛出SQLException,因为当光标位于时,不允许使用next()方法插入行?

这是未指明的,在实践中意味着“不是一个好主意”。我可以看到几个看似合理的结果:

  • 抛出SQLException
  • rs.next()返回false而不更改任何内容
  • 此行为相当于调用rs.moveToCurrentRow(),然后调用rs.next()
  • 此行为相当于调用rs.moveToCurrentRow(),然后调用rs.next(),然后调用rs.moveToInsertRow()

这不一定是详尽的清单。很可能,不同的JDBC驱动程序以不同的方式处理这种情况,这是避免出现这种情况的一个很好的理由。