2017-07-25 63 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