Я работаю над Java-программой с базой данных sql, которая представляет собой покемон. У меня проблемы с помещением строки базы данных в массив. Вот часть моего кода, которая вызывает проблему.
String query2 = "SELECT * " +
"FROM Pokedex.typea, Pokedex.Pokemon where Pokemon.ID = " + pk +
" AND type1 = type_name";
java.sql.Statement st2 = con.createStatement();
ResultSet rs2 = st2.executeQuery(query2);
int i = 2
while(rs2.next() && i<19) {
weaka[i-2] = rs2.getInt(i);
System.out.println(weaka[i-2]);
i++;
}
и вот строка, которую возвращает query2 (я тестировал это с помощью mysql workbench):
Fire 1 0 0 0 1 0 1 0 0 1 -1 1 0 0 0 -1 1 -1 4 Charmander 39 52 43 60 50 65 309 Fire null Blaze null Solar Power NULL
Я надеялся, что этот код поместит значения из столбцов со 2 по 18 в массив "weaka", но весь код постоянно выполняет
weaka[i-2] = rs2.getInt(i);
System.out.println(weaka[i-2]);
но он никогда не увеличивает i, никогда не читает содержимое любого другого столбца и никогда не заканчивается. Программа просто печатает «1» пару сотен раз, а затем вылетает. Почему i не повторяется?
Может ли кто-нибудь помочь мне выяснить, как заставить мой код спуститься по строке и прочитать содержимое столбцов со 2 по 18 в массиве? Спасибо
Обновлено: Спасибо за оба ответа. Они оба работали, чтобы заставить массив считывать строку, но процесс все равно продолжается дольше, чем следовало бы, с обоими ответами. это как будто он читает строку несколько раз. Код, который я вам дал, не был в цикле, так почему он читает строку несколько раз?
также Pokemon.ID - это первичный ключ моей схемы, поэтому запрос вернет только одну строку.




Метод ResultSet.next() пытается прочитать строка из набора результатов и возвращает true, если это удается. Что ты делаешь:
while(rs2.next() && i<19) {
weaka[i-2] = rs2.getInt(i);
System.out.println(weaka[i-2]);
i++;
}
читает строку, помещает первое значение в массив и читает следующую строку. Но следующей строки нет, поэтому выполнение останавливается тут же.
Вместо этого сделайте следующее:
if (rs2.next()) {
for (int i=2; i < 19; i++){
weaka[i-2] = rs2.getInt(i);
System.out.println(weaka[i-2]);
}
}
Если вам нужно прочитать более одной строки, вам тоже придется с этим справиться.
Что произойдет, если ResultSet имеет несколько строк?
Как я уже упоминал, с этим нужно разобраться. Но, судя по названиям полей типа ID и переменных pk, я предполагаю, что это первичный ключ. Мой пример служит для объяснения того, как следует использовать ResultSet.next().
Попробуйте использовать отладчик. Цикл
whileиз ответов может обрабатывать более одной строки, только если SQL-запрос возвращает более одной строки из базы данных.