我正在尝试使用spring jdbc模板获取数据。 该表有数百万条记录。
使用以下代码需要花费无限时间,最后我停止运行代码。
private static final String CLIENTDATA_QUERY = "select logtime, clientip, clientagent, uri from client_data";
public List<ClientDataModel> readFromClientDataDB() {
// jdbcTemplate.setFetchSize(1000);
List<ClientDataModel> clientData = jdbcTemplate.query(CLIENTDATA_QUERY, new RowMapper<ClientDataModel>() {
@Override
public ClientDataModel mapRow(ResultSet rs, int rowNum) throws SQLException {
ClientDataModel model = new ClientDataModel();
model.setLogtime(rs.getString("logtime"));
model.setClientIP(rs.getString("clientip"));
model.setClientAgent(rs.getString("clientagent"));
// model.setUri(rs.getString("uri"));
return model;
}
});
System.out.println("Client Data Size :" + clientData.size());
return clientData;
}
请有人建议我如何以最有效的方式从一张大桌子中检索记录。
需要获取所有记录,然后开始进一步逻辑的代码。这是在服务器端。
答案 0 :(得分:1)
不要使用返回列表的方法而是使用RowCallBackHandler.您也可以在查询中使用分页。
JDBCTemplate需要以对象的形式读入从数据库中检索的所有数据,在保存大型结果集时占用大量内存。在这种情况下,Spring Batch是更好的解决方案。