Проблемы с чтением строки SQL с Java - PullRequest
0 голосов
/ 01 мая 2018

Я работаю над 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[i-2] = rs2.getInt(i);
System.out.println(weaka[i-2]);

но оно никогда не увеличивает i, никогда не читает содержимое любого другого столбца и никогда не заканчивается. Программа просто печатает «1» пару сотен раз, а затем вылетает. Почему я не повторяюсь?

Может ли кто-нибудь помочь мне выяснить, как заставить мой код идти по строке и читать содержимое столбца со 2 по 18 в массив? Спасибо

РЕДАКТИРОВАТЬ: Спасибо за оба ответа. Они оба работали, чтобы получить массив, читающий строку, но процесс все еще продолжается дольше, чем следовало бы с обоими ответами. как будто он читает строку несколько раз. Код, который я вам дал, не был в цикле, так почему он читает строку несколько раз?

также Pokemon.ID является первичным ключом моей схемы, поэтому запрос вернет только одну строку.

1 Ответ

0 голосов
/ 01 мая 2018

Метод 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]);
    }
}

Если нужно прочитать более одной строки, вам также придется с этим справиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...