2017-07-25 131 views
0

創建列表我需要幫助創建使用ResultSet和Java 8帶彈簧的ResultSet

我需要通過名稱來篩選列表中的聯繫人列表,只有當名字是適合然後將其添加到列表中。並設置fetchSize與Postgres的一百萬行一起工作。

例如:

public List <Contact> getAll (String nameFilter) { 
        Pattern pattern = Pattern.compile (nameFilter); 

        List <Contact> contacts = new ArrayList <>(); 

        JdbcTemplate.query ("SELECT * FROM contacts", rs -> { 
// here it is necessary maybe to do something like this !pattern.matcher(name).matches() 
// and maybe jdbcTemplate.setFetchSize (*how many rows will be better to read from 
// postgres? (5,5000,50000 ???) *) 
            Contacts.add (new Contact (rs.getInt ("id"), rs.getString ("name"))); 
        }); 

        return contacts; 

    } 

我怎樣才能做到這一點?

回答

1

您需要在運行查詢之前設置獲取大小。請記住,如果您使用單身人士JdbcTemplate對象,它會影響您的所有查詢,並且應在創建對象時設置此配置。

關於創建列表,使用功能接口ResultSetExtractor,這樣的事情應該工作:

springJdbcTemplate.query ("SELECT * FROM contacts", rs -> { 
    while(rs.next()) { 
    if (pattern.matcher(rs.getString("name")).matches()) 
     contacts.add (new Contact (rs.getInt ("id"), rs.getString ("name"))); 
    } 
    return null; 
}); 

這足以說,如果你可以在模式轉換成SQL查詢會快很多。

+0

有多少行會更好閱讀? – noxi

+1

大提取大小意味着當行集耗盡時,您會問更少的數據庫時間,但您需要更多的內存來保存它。對於較小的讀取大小,您將更頻繁地詢問數據庫,但您需要較少的內存。所以這取決於你期待的結果有多大以及你需要什麼。速度?記憶?這是你的決定。 – alfcope