这是我的代码,我正在运行我的查询并将结果集添加到ArrayList中。修改代码
private ArrayList<String> getEventsFromShares() throws SQLException {
Statement eventStmt = null;
ResultSet rs = null;
ArrayList<String> eventsList = new ArrayList<String>(10000);
try {
eventStmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
conn.setAutoCommit(false);
System.out.println("Getting data from shares table");
rs = eventStmt.executeQuery(
"select s.event_id from tso_shares s join ife.entityids i on s.event_id = i.entityid where to_char(i.datemodified,'YYYY') = "
+ year + "");
eventStmt.setFetchSize(500);
while (rs.next()) {
eventsList.add(rs.getString(1));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
rs.close();
eventStmt.close();
}
System.out.println("eventsMap" + eventsList.size());
return eventsList;
}
查询只在几秒钟后出现,但addog进入ArrayList需要大约15分钟的时间。
有人可以帮我识别问题或如何改进我的代码。
看起来你只想从表event_id
中列s
,所以将你的SQL语句更改为select s.event_id
而不是select s.*
。然后你可以使用ResultSet
而不是rs.getString(1)
从rs.getString("event_id")
中提取值
如果您知道SQL查询将返回多少行,例如,您也可以为ArrayList
提供初始容量。
ArrayList<String> list = new ArrayList<>(500)