Java, циклический набор результатов
В Java у меня есть такой запрос:
String querystring1= "SELECT rlink_id, COUNT(*)"
+ "FROM dbo.Locate "
+ "GROUP BY rlink_id ";
В таблице rlink_id есть следующие данные:
Sid lid
3 2
4 4
7 3
9 1
Как извлечь эти значения с помощью Java ResultSet?
Вот что я до сих пор:
String show[] = {rs4.getString(1)};
String actuate[] = {rs4.getString(2)};
asString = Arrays.toString(actuate);
Ответы
Ответ 1
List<String> sids = new ArrayList<String>();
List<String> lids = new ArrayList<String>();
String query = "SELECT rlink_id, COUNT(*)"
+ "FROM dbo.Locate "
+ "GROUP BY rlink_id ";
Statement stmt = yourconnection.createStatement();
try {
ResultSet rs4 = stmt.executeQuery(query);
while (rs4.next()) {
sids.add(rs4.getString(1));
lids.add(rs4.getString(2));
}
} finally {
stmt.close();
}
String show[] = sids.toArray(sids.size());
String actuate[] = lids.toArray(lids.size());
Ответ 2
Result Set
фактически содержат несколько строк данных и используют курсор для указания текущей позиции. Поэтому в вашем случае rs4.getString(1)
вы получите только данные в первом столбце первой строки. Чтобы перейти к следующей строке, вам нужно позвонить next()
быстрый пример
while (rs.next()) {
String sid = rs.getString(1);
String lid = rs.getString(2);
// Do whatever you want to do with these 2 values
}
в ResultSet
есть много полезного метода, вы должны посмотреть:)
Ответ 3
Проблема с вашим кодом:
String show[]= {rs4.getString(1)};
String actuate[]={rs4.getString(2)};
Это создаст новый массив каждый раз, когда ваш цикл (не добавляется, как вы могли бы предположить), и, следовательно, в конце вы будете иметь только один элемент на массив.
Вот еще один способ решить эту проблему:
StringBuilder sids = new StringBuilder ();
StringBuilder lids = new StringBuilder ();
while (rs4.next()) {
sids.append(rs4.getString(1)).append(" ");
lids.append(rs4.getString(2)).append(" ");
}
String show[] = sids.toString().split(" ");
String actuate[] = lids.toString().split(" ");
Эти массивы будут иметь все необходимые элементы.