resultset.next () показывает вывод только первой строки - PullRequest
0 голосов
/ 28 февраля 2019

Итак, у меня есть что-то вроде этого:

System.out.println("Enter owner's IC no. or plate no. : ");
String update = in.nextLine();

String sql = String.format("SELECT * FROM `vehicle` WHERE ic='%s' OR plate ='%s'",update,update);

ResultSet rs = stmt.executeQuery(sql);

if(rs.next()) {
    System.out.println("RegNo." +"\t\t"+ "Name" + "\t\t" + "IC" +"\t\t" + "Plate No." + "\t" + "Color" + "\t\t" + "Year" + "\t\t" + "Make" + "\t\t" + "Model" +"\t\t"+ "Capacity" + "\t" + "Type" +"\t\t" + "Max Load");
}
else {
    System.out.println("IC and PLate No. not found....");}

while (rs.next()) {
    regno = rs.getInt("regno");
    name = rs.getString("name");
    ic = rs.getString("ic");
    plate = rs.getString("plate");
    color = rs.getString("color");
    year = rs.getInt("year");
    make = rs.getString("make");
    model = rs.getString("model");
    capacity = rs.getDouble("capacity");
    type = rs.getString("type");
    maxload = rs.getDouble("maxload");

    System.out.println(toString());
}   

Я пытаюсь сделать следующее: если данные будут найдены в базе данных, он выведет следующую таблицу для соответствующих выходных данных.

Теперь предполагается распечатать каждый вывод.Но он печатает только первый.

Я считаю, что причиной является следующий код:

 if(rs.next()) {
    System.out.println("RegNo." +"\t\t"+ "Name" + "\t\t" + "IC" +"\t\t" + "Plate No." + "\t" + "Color" + "\t\t" + "Year" + "\t\t" + "Make" + "\t\t" + "Model" +"\t\t"+ "Capacity" + "\t" + "Type" +"\t\t" + "Max Load");
}
else {
    System.out.println("IC and PLate No. not found....");}

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Итак, я вижу здесь два вопроса.Самый большой из них:

System.out.println(toString());

, который вызывает метод .toString() в текущем классе, который не выводит любые данные из вашего ResultSet.По крайней мере, не на основе какого-либо кода, который вы показали.Вы храните все значения, возвращаемые из ResultSet в переменных, но эти переменные, кажется, нигде не используются.Вам нужно как-то передать эти переменные в .println().

Вторая проблема заключается в том, что rs.next() перемещает курсор на одну строку вперед.Поэтому, когда вы делаете это:

if(rs.next()) {

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

0 голосов
/ 28 февраля 2019

Используйте MessageFormat для форматирования вывода и counter, чтобы определить, пустой ли набор результатов, например:

String strFormat = "RegNo. {0}\tName {1}\tIC {2}\tPlate No. {3}\tColor {4}\tYear {5}\tMake {6}\tModel {7}\tCapacity {8}\tType {9}\tMax Load {10}");

int counter = 0;

while (rs.next()) {
    counter++;

    regno = rs.getInt("regno");
    name = rs.getString("name");
    ic = rs.getString("ic");
    plate = rs.getString("plate");
    color = rs.getString("color");
    year = rs.getInt("year");
    make = rs.getString("make");
    model = rs.getString("model");
    capacity = rs.getDouble("capacity");
    type = rs.getString("type");
    maxload = rs.getDouble("maxload");

    System.out.println(MessageFormat.format(strFormat, regno, name, ic, plate, color, year, make, model, capacity, type, maxload));
}

if (counter == 0) {
    System.out.println("IC and PLate No. not found....");
}
...