Copying Java ResultSet

后端 未结 2 1205
隐瞒了意图╮
隐瞒了意图╮ 2020-12-10 16:13

I have a java.sql.ResultSet object that I need to update. However the result set is not updatable. Unfortunately this is a constraint on the particular framewor

2条回答
  •  情话喂你
    2020-12-10 16:39

    The normal practice would be to map the ResultSet to a List where Entity is your own class which contains information about the data represented by a single database row. E.g. User, Person, Address, Product, Order, etcetera, depending on what the table actually contains.

    List entities = new ArrayList();
    // ...
    while (resultSet.next()) {
        Entity entity = new Entity();
        entity.setId(resultSet.getLong("id"));
        entity.setName(resultSet.getString("name"));
        entity.setValue(resultSet.getInt("value"));
        // ...
        entities.add(entity);
    }
    // ...
    return entities;
    

    Then, you can access, traverse and modify it the usual Java way. Finally, when persisting it back in the DB, use a PreparedStatement to update them in batches in a single go.

    String sql = "UPDATE entity SET name = ?, value = ? WHERE id = ?";
    // ...
    statement = connection.prepareStatement(sql);
    for (Entity entity : entities) {
        statement.setString(1, entity.getName());
        statement.setInt(2, entity.getValue());
        statement.setLong(3, entity.getId());
        // ...
        statement.addBatch();
    }
    statement.executeBatch();
    // ...
    

    Note that some DB's have a limit on the batch size. Oracle's JDBC driver has a limit on around 1000 items. You may want to call executeBatch() every 1000 items then. It should be simple using a counter inside the loop.

    See also:

    • Collections tutorial
    • PreparedStatement tutorial

提交回复
热议问题