我的问题与此处提出的问题类似:http://forum.springsource.org/showthread.php?84508-jdbctemplate.query()-sorted-result-set但没有提供明确的答案 - ArrayList
不能保证顺序。
基本上,我想知道 jdbcTemplate.query()
返回的调用是否保证结果集的顺序,以及我是否可以将其转储到 LinkedList
中,并且传递它:)
谢谢!
编辑:我应该澄清一下,查询确实包含一个 order by
子句,因此我需要一个保证顺序的结果集。关于 ArrayList
没有这样做,我是不正确的。由于 jdbcTemplate 是一个接口(interface),因此实现将取决于 db 库。为了安全起见,我应该假设将使用 ArrayList
还是再次对其进行排序?
最佳答案
an ArrayList does not guarantee order.
这是错误的。 ArrayList
确实保证顺序。它有一个 get(int index)
方法,可用于从指定的基于 0 的索引中检索元素。 add(T item)
方法会将它们按顺序添加到列表中。您可能会将 List 集合类型与 Set 接口(interface)混淆,后者与 List 类似,只是它不保证顺序。
也就是说,它实际上并没有回答你的问题......
ResultSet
没有指定的顺序,将按表的自然 顺序返回数据。这通常基于 PK 字段,但并非所有 DBMS 都如此。
如果顺序很重要,请明确说明。即使它现在以所需的顺序返回,对 DB 模式的更改也可能会在以后影响它并破坏您的代码所做的假设。明确的更好,并且会更清楚地表达代码的意图。
从编辑更新到问题: 如果在查询中指定了 order by,则可以 100% 依赖结果集的顺序。无需重新排序。
关于java - jdbcTemplate query() 保证保持结果集顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6270213/