【发布时间】:2017-06-28 21:29:20
【问题描述】:
我正在尝试使用 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;
}
请有人建议我如何以最有效的方式从大表中检索记录。
需要获取所有记录,然后开始执行进一步逻辑的代码。这是在服务器端。
【问题讨论】:
-
分页,分页,分页!使用光标等。
-
@FedericoPeraltaSchaffner 请您提出光标的意思。如果可能的话,你能否举个例子。谢谢
-
不能逐页处理记录吗?为什么需要先将整个表读入内存?
标签: java mysql java-8 spring-jdbc jdbctemplate