代码之家  ›  专栏  ›  技术社区  ›  Peanut

复制Java结果集

  •  7
  • Peanut  · 技术社区  · 14 年前

    我有一个 java.sql.ResultSet

    在这个阶段,我认为我最好的选择是创建一个新的结果集对象,并将原始结果集的内容复制到新的结果集中,同时操作数据。

    我对Java什么都不熟悉,所以任何帮助都会得到感激的。

    2 回复  |  直到 13 年前
        1
  •  11
  •   bluish dmajkic    13 年前

    CachedRowSet 这正是我需要的。有了这个我就可以断开电源了 ResultSet

    更重要的是,因为 结果集

        2
  •  10
  •   Community CDub    4 年前

    通常的做法是绘制 ResultSet List<Entity> 哪里 Entity 是您自己的类,其中包含有关由单个数据库行表示的数据的信息。例如。 User Person Address , Product , Order ,等等,取决于表实际包含的内容。

    List<Entity> entities = new ArrayList<Entity>();
    // ...
    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;
    

    然后,您可以访问、遍历和修改它。最后,在将其持久化回数据库时,使用 PreparedStatement 一次性批量更新。

    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();
    // ...
    

    请注意,有些数据库对批处理大小有限制。Oracle的JDBC驱动程序限制在1000项左右。你可以打电话给我 executeBatch() 每1000件。在循环中使用计数器应该很简单。