我有Employee表和一个Entity类,
我的任务是这样我需要两次结果集(类型可滚动)中的employee表数据,
在这种情况下,第二次使用数据会更好:>
1:创建实体类的实例,并在第一次迭代结果集时将其存储在List中
OR
2:在第一次迭代后调用结果集的first()方法返回第一行并第二次使用数据。
哪个选项会消耗更少的时间和资源 如果您有更好的建议,请提供 感谢。
答案 0 :(得分:1)
除非这是非常大的结果集,否则你可能会更好地将整个JDBC ResultSet
用于内存并在java.util.List
而不是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);
答案 1 :(得分:0)
缓存从数据库中检索的数据。它总是比轮询更好,即使驱动程序在自己的级别上提供缓存。如果不再需要,你可以随时撤回。
答案 2 :(得分:0)
根据主键使用Map
员工可能会有所帮助吗?
如果您描述为什么您认为您需要多次迭代列表,那么我们会看到是否有更好的算法可以在第一时间摆脱第二次交互。