Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Vermeiden des Überspringens einer Zeile Durch next() Methode von ResultSet

Hören Sie zuerst auf, SQL so zu bauen - verwenden Sie parametrisiertes SQL und ein PreparedStatement . Ihr aktueller Code ist anfällig für SQL-Injection-Angriffe.

Rufen Sie grundsätzlich nicht rs.next() auf zweimal hintereinander (zuerst in der if dann im while )... das geht ganz einfach, indem Sie Ihren while umwandeln Schleife in ein do/while Schleife:

if (rs.next()) {
    do {
        System.out.print(rs.getString("idUser") + " ,");
        System.out.print(rs.getString("Name") + " ,");
        System.out.print(rs.getString("Email") + " ,");
        System.out.println(rs.getString("country") + " .");
    } while (rs.next());
}

Oder nur haben die while -Schleife, mit einer separaten Variable, um zu erkennen, dass Sie etwas gesehen haben Ergebnisse:

bool anyResults = false;
while (rs.next()) {
    anyResults = true;
    System.out.print(rs.getString("idUser") + " ,");
    System.out.print(rs.getString("Name") + " ,");
    System.out.print(rs.getString("Email") + " ,");
    System.out.println(rs.getString("country") + " .");
}
if (!anyResults) {
    JOptionPane.showMessageDialog(null, "Not Found");
}

(Außerdem sollten Sie try-with-resources verwenden, um Ihr ResultSet zu schließen etc, und nur einen Stack-Trace auf stdout zu drucken, ist fast nie der geeignete Weg, um Ausnahmen zu behandeln ...)