我有几个关于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()方法不是当光标在插入行中时允许?
答案 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驱动程序以不同的方式处理这种情况,这是避免出现这种情况的一个很好的理由。