2012-04-05 86 views
1

我有僱員表和實體類的,
我的任務是這樣的,我需要的結果集(類滾動)兩次內的職員表的數據,
在這樣的情況下,第二次使用數據會有什麼好處 - >請教JDBC結果

1:創建實體類的實例,並在第一次迭代結果集時將其存儲在List中。

2:第一次迭代後,調用結果集的第一個()方法返回第一行並第二次使用數據。

哪個選項會消耗更少的時間和資源。
如果您有更好的建議,請提供。
謝謝。

+0

結果集有多大(即有多少條記錄?) – 2012-04-05 08:00:44

+0

大約有1000行。 – 2012-04-05 08:02:07

+0

那些記錄並不多。您可以將它們加載到內存中,並輕鬆地在內存中進行表示... – 2012-04-05 08:12:21

回答

1

除非這是對非常大的結果集,你可能好得多消耗整個JDBC ResultSet到內存中,並在java.util.Listjava.sql.ResultSet這些原因操作,而不是:

  1. 名單更用戶友好的開發人員
  2. 數據庫資源可以立即釋放(這是不容易出錯的)
  3. 您可能不會在1000行的Java內存用完內存。
  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); 

Spring JdbcTemplate

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

緩存從數據庫中檢索數據。即使驅動程序在自己的級別提供緩存,它總是比輪詢更好。如果不再需要,你可以隨時撤回。

+0

關於緩存數據的任何furthur建議 – 2012-04-05 08:10:44

0

也許使用主鍵的Map員工會有幫助嗎?

如果你會描述爲什麼你認爲你需要不止一次迭代列表,那麼比我們看到有更好的算法可以擺脫第二個位置。