1

我有员工表和一个实体类,
我的任务是我需要两次结果集中(可滚动类型
)中的员工表数据, 在这种情况下,第二次使用数据会更好->

1:在第一次遍历结果集时,创建实体类的实例并将其存储在List中。

2:第一次迭代后调用结果集的 first() 方法返回第一行并第二次使用数据。

哪个选项将消耗更少的时间和资源。
如果您有更好的建议,请提供。
谢谢。

4

3 回答 3

1

除非这是关于非常大的结果集,否则您可能最好将整个 JDBC 消耗ResultSet到内存中并在 ajava.util.List而不是 a 上操作java.sql.ResultSet,原因如下:

  1. 该列表对开发人员更友好
  2. 可以立即释放数据库资源(不易出错)
  3. 在 Java 中,您可能不会用完 1000 行的内存。
  4. 在可滚动对象上操作时可能会犯很多错误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

JdbcTemplate template = // ...
List result = template.query("SELECT * FROM Person", rowMapper);
于 2012-04-05T08:01:58.307 回答
0

缓存您从数据库中检索的数据。即使驱动程序在自己的级别上提供缓存,它也总是比轮询更好。如果不再需要它,您可以随时撤回它。

于 2012-04-05T08:03:43.633 回答
0

也许Map通过他们的主键使用员工会有所帮助?

如果您描述了为什么您认为您需要多次迭代列表,那么我们会看看那里是否有更好的算法来首先摆脱第二次交互。

于 2012-04-05T08:11:37.907 回答