присвоение определенной записи в ResultSet переменной - PullRequest
1 голос
/ 29 декабря 2008

Я хочу получить набор записей из базы данных, сделать rs.next () и затем присвоить результат этого переменной, чтобы передать методу, который будет использовать эту запись, так же, как я не присваивая его переменной и передавая его методу Есть какой-либо способ сделать это? Я использую JAVA (1.5)


Спасибо за все ответы

Я не хочу передавать весь набор результатов в метод, только текущую строку, но, как я понимаю, это невозможно сделать

Ответы [ 4 ]

1 голос
/ 29 декабря 2008

Нет, это не поддерживается "из коробки", но, возможно, вам может помочь следующая идея:

ResultSetMetaData meta = rs.getMetaData();
while (rs.next()) {
  Map<String,Object> row = new HashMap<String,Object>();
  for (int i = 1; i <= meta.getColumnCount(); ++i) {
    row.put(meta.getColumnName(i), rs.getObject(i));
  }
  processRow(row);
}

Проблема в том, что вам необходимо привести значения из row -карты в processRow(), и это не будет работать для всех комбинаций типа / драйвера (BLOB, ...).

0 голосов
/ 29 декабря 2008

Я часто нахожу список> структуру данных очень полезным при работе с наборами результатов.

0 голосов
/ 29 декабря 2008

Я думаю, что понял вас сейчас. :)

Нет, это невозможно сделать таким образом. ResultSet меняет свое внутреннее состояние при каждом вызове на ResultSet.next(), поэтому сохранение ссылки на него никуда вас не приведет. Вы должны извлечь нужные данные в некоторый пользовательский объект и сохранить их.

CustomData cd = new CustomData();
cd.setString1(rs.getString(1));
cd.setInt1(rs.getInt(2));
...

Затем вы можете сохранить переменную cd и приступить к обработке вашего ResultSet.

0 голосов
/ 29 декабря 2008

Вы хотите присвоить результат rs.next () переменной?

Боюсь, вы не можете этого сделать. Вы можете получить ссылку из этого rs и обработать ее другим способом (так же, как и без назначения ее переменной)

Когда вы передаете rs в качестве аргумента методу, который именно то, что вы уже делаете.

while( rs.next() ) { 
    list.add( createFrom( rs ) );
}

...

public Object createFrom( ResultSet rs ) {  // Here rs is a copy of the reference in the while above. 
}

Правильно ли я понял ваш вопрос?

...