有关JDBC ResultSet的建议

时间:2012-04-05 07:59:17

标签: java jdbc scrollableresults

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

1:创建实体类的实例,并在第一次迭代结果集时将其存储在List中 OR
2:在第一次迭代后调用结果集的first()方法返回第一行并第二次使用数据。

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

3 个答案:

答案 0 :(得分:1)

除非这是非常大的结果集,否则你可能会更好地将整个JDBC ResultSet用于内存并在java.util.List而不是java.sql.ResultSet上运行:

  1. 列表对开发人员来说更加用户友好
  2. 可以立即释放数据库资源(这不容易出错)
  3. 您可能不会在1000行的Java中耗尽内存。
  4. 在可滚动的ResultSet上操作时可能会犯很多错误,因为各种JDBC驱动程序只是巧妙地实现了这个功能
  5. 您可以使用工具来使用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);
    

    Spring JdbcTemplate

    JdbcTemplate template = // ...
    List result = template.query("SELECT * FROM Person", rowMapper);
    

答案 1 :(得分:0)

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

答案 2 :(得分:0)

根据主键使用Map员工可能会有所帮助吗?

如果您描述为什么您认为您需要多次迭代列表,那么我们会看到是否有更好的算法可以在第一时间摆脱第二次交互。