将结果集添加到ArrayList需要花费大量时间

问题描述 投票:0回答:1

这是我的代码,我正在运行我的查询并将结果集添加到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分钟的时间。

有人可以帮我识别问题或如何改进我的代码。

java arraylist resultset jdbc-odbc
1个回答
3
投票

看起来你只想从表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)
© www.soinside.com 2019 - 2024. All rights reserved.