Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PreparedStatement.executeQuery如何工作?_Java_Sql_Sql Server 2005_Jdbc - Fatal编程技术网

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