Java PreparedStatement.executeQuery如何工作?
Java PreparedStatement.executeQuery如何工作?,java,sql,sql-server-2005,jdbc,Java,Sql,Sql Server 2005,Jdbc,PreparedStatement.executeQuery如何工作?它是否从数据库中获取结果,然后我循环遍历它们?或者它获取第一个结果,并记录在案。下一步是否继续sql查询到下一行 ResultSet record = statement.executeQuery("select * from users"); while (record.next()) { //do something } 谢谢你你做得对。它从您的查询中获取整个结果,然后您循环查询。 内部指针或光标最初在第
PreparedStatement.executeQuery
如何工作?它是否从数据库中获取结果,然后我循环遍历它们?或者它获取第一个结果,并记录在案。下一步是否继续sql查询到下一行
ResultSet record = statement.executeQuery("select * from users");
while (record.next()) {
//do something
}
谢谢你你做得对。它从您的查询中获取整个结果,然后您循环查询。
内部指针或光标最初在第一行之前启动,因此调用
record.next()
将其移动到第一行
来自文档: 执行给定的SQL语句,该语句返回单个ResultSet 反对 表示数据库结果集的数据表,通常是 通过执行查询数据库的语句生成
public boolean next() throws SQLException
将光标从当前位置向下移动一行。结果集
光标最初位于第一行之前;第一次打电话给
接下来,该方法使第一行成为当前行;第二个电话
使第二行成为当前行,依此类推
如果当前行的输入流是打开的,则调用
方法next将隐式关闭它。ResultSet对象的警告
读取新行时,链被清除
作为一种表示,这意味着该语句执行一次,并且在迭代时对该执行的结果进行迭代
但如何处理来自数据库的结果实际上取决于实现。为了进行对比,我将参考两个数据库MSSQL、MYSQL MSSQL MSSQL驱动程序的文档对结果的处理方式进行了精确的注释,您可以找到: 有两种类型的结果集:客户端和服务器端 客户端结果集是在结果适合于 客户端进程内存。这些结果提供了最快的性能 并由MicrosoftJDBCDriverforSQLServer在其 从数据库中获取完整性。这些结果集不会施加额外的影响 通过产生创建服务器端的开销来加载数据库 光标。但是,这些类型的结果集是不可更新的 当结果不符合要求时,可以使用服务器端结果集 客户端进程内存或结果集可更新时。具有 对于这种类型的结果集,JDBC驱动程序会创建一个服务器端游标 并在用户滚动时透明地获取结果集的行 通过它 MySQL JDBC接口的MySql实现,您可以阅读: 默认情况下,结果集被完全检索并存储在内存中。 在大多数情况下,这是最有效的操作方式,并且由于 MySQL网络协议的设计更易于实现。如果 您使用的结果集包含大量行或行 较大的值,并且无法在JVM中为 如果需要内存,您可以告诉驱动程序将结果流式返回 一次一排
public boolean next() throws SQLException