Добавить данные вручную в Java ResultSet - PullRequest
2 голосов
/ 23 марта 2012

Я не уверен, что это может быть довольно глупый вопрос.Но возможно ли вручную добавить данные / значения в набор результатов Java?Например, если у меня уже есть заполненный ResultSet, есть ли способ добавить больше данных поверх него?

//if this was possible for instance
ResultSet rs;
rs.setData("someValue");

Спасибо!

Ответы [ 3 ]

4 голосов
/ 23 марта 2012

Вы можете обернуть любой JDBC ResultSet своей пользовательской реализацией:

public class MyResultSet implements ResultSet {

  // Delegate most implementations to the underlying database result set:
  private final ResultSet delegate;
  public MyResultSet(ResultSet delegate) {
    this.delegate = delegate;
  }

  @Override
  public int getInt(int index) throws SQLException {
    return delegate.getInt(index);
  }

  // [... more delegate methods ...]

  // Add custom methods
  public void setData(Object someValue) { ... }
  public Object getData() { ... }
}

Ваш пользовательский набор результатов ведет себя как любой другой набор результатов.Клиентский код, считывающий данные из вашего пользовательского набора результатов, не заметит изменений, которые вы внесете в него «под капотом».Другими словами, вы можете делать вид, что некоторые данные доступны

public class MyResultSet implements ResultSet {
  // [...]

  @Override
  public int getInt(int index) throws SQLException {
    if (index == 3) {
      return 42;
    } else {
      return delegate.getInt(index);
    }
  }
}
3 голосов
/ 23 марта 2012

Вы можете добавить значения к ResultSet , используя insertRow(), но , это также добавит данные в базовую базу данных .Если вы хотите сделать это, вы должны сделать что-то вроде:

rs.moveToInsertRow();
rs.updateString("someColumn", "someValue");
rs.insertRow();

Если вы просто хотите добавить данные к результатам без изменения базы данных, добавьте данные из ResultSet в List илиSet или что-то подобное и измените это.

0 голосов
/ 23 марта 2012

Вам необходимо создать оператор, который будет возвращать обновляемый ResultSet.Пример:

  Statement stmt = connection.createStatement(
     ResultSet.TYPE_SCROLL_SENSITIVE, 
     ResultSet.CONCUR_UPDATABLE
  );
  ResultSet resultSet = stmt.executeQuery(" SELECT col1 FROM tablename ");
  rs.absolute(5); // moves the cursor to the 5th row of rs
  rs.updateString("col1", "NEW VALUE"); // updates the col1 column of row 5 to be NEW VALUE
  rs.updateRow(); // updates the row in the data source
...