我有员工表和一个实体类,
我的任务是我需要两次结果集中(可滚动类型
)中的员工表数据,
在这种情况下,第二次使用数据会更好->
1:在第一次遍历结果集时,创建实体类的实例并将其存储在List中。
或
2:第一次迭代后调用结果集的 first() 方法返回第一行并第二次使用数据。
哪个选项将消耗更少的时间和资源。
如果您有更好的建议,请提供。
谢谢。
我有员工表和一个实体类,
我的任务是我需要两次结果集中(可滚动类型
)中的员工表数据,
在这种情况下,第二次使用数据会更好->
1:在第一次遍历结果集时,创建实体类的实例并将其存储在List中。
或
2:第一次迭代后调用结果集的 first() 方法返回第一行并第二次使用数据。
哪个选项将消耗更少的时间和资源。
如果您有更好的建议,请提供。
谢谢。
除非这是关于非常大的结果集,否则您可能最好将整个 JDBC 消耗ResultSet
到内存中并在 ajava.util.List
而不是 a 上操作java.sql.ResultSet
,原因如下:
ResultSet
,因为各种 JDBC 驱动程序实现此功能的方式略有不同。您可以使用工具来使用 JDBC 结果集。例如Apache DbUtils:
QueryRunner run = new QueryRunner(dataSource);
ResultSetHandler<List<Person>> h
= new BeanListHandler<Person>(Person.class);
List<Person> persons = run.query("SELECT * FROM Person", h);
jOOQ(3.0 语法):
List<Person> list =
DSL.using(connection, sqldialect)
.fetch("SELECT * FROM Person");
.into(Person.class);
JdbcTemplate template = // ...
List result = template.query("SELECT * FROM Person", rowMapper);
缓存您从数据库中检索的数据。即使驱动程序在自己的级别上提供缓存,它也总是比轮询更好。如果不再需要它,您可以随时撤回它。
也许Map
通过他们的主键使用员工会有所帮助?
如果您描述了为什么您认为您需要多次迭代列表,那么我们会看看那里是否有更好的算法来首先摆脱第二次交互。