gpt4 book ai didi

java - 对于相同状态的数据库数据,通过 JDBC 进行的相同 SQL 查询,结果集中的行顺序是否恒定?

转载 作者:行者123 更新时间:2023-12-02 10:22:41 25 4
gpt4 key购买 nike

尝试编写一个使用 JDBC 驱动程序在 Java 中执行 SQL 查询的作业(数据库供应商可以是 Oracle、DB2 或 Postgres)。查询并不重要。假设它过滤 1 个数据库表中几列中的某些值,结果是几千行。

对于结果集中的每一行,我需要执行一些逻辑,有时可能会失败。

我有一个光标位置,因此我“记住”上次成功处理的行位置。

现在我想在失败时实现“恢复”功能,以免再次处理整个结果集。

我查看了 Java 8 的 JDBC 规范,但没有发现任何有关行顺序的信息(对于相同数据的相同查询是否相同)?也未能在数据库供应商规范中找到任何内容。

有人可以暗示在哪里寻找有关行顺序可预测性的答案吗?

最佳答案

您可以通过包含 ORDER BY 子句来保证行的顺序,该子句包含唯一标识行所需的所有列。事实上,这是保证重复调用 SELECT 语句的顺序的唯一方法,即使数据库中没有任何更改。如果没有明确的 ORDER BY 子句,数据库引擎可以自由地以在特定时刻最方便的任何顺序返回行。

考虑一个简单的例子:

您是数据库的唯一用户。数据库引擎在内存中有一个行缓存,可以保存最后检索的 1000 行。数据库服务器刚刚重启,所以缓存是空的。您SELECT * FROM tablename 数据库引擎会检索 2000 行,其中最后 1000 行保留在缓存中。然后再次执行SELECT * FROM tablename。数据库引擎检查缓存并从上一个查询中找到 1000 行,因此它会立即返回它们,因为这样做时不必再次访问磁盘。然后继续查找其他 1000 行。最终结果是,为初始 SELECT last 返回的 1000 行实际上为后续 SELECT first 返回。

关于java - 对于相同状态的数据库数据,通过 JDBC 进行的相同 SQL 查询,结果集中的行顺序是否恒定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54219459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com