sql >> Base de Datos >  >> RDS >> Mysql

Evitar saltarse una fila por el método next() de ResultSet

Primero, deje de construir SQL así:use SQL parametrizado y un PreparedStatement . Su código actual es vulnerable a los ataques de inyección SQL.

Básicamente, no llames a rs.next() dos veces seguidas (primero en el if luego en el while )... puedes hacerlo fácilmente convirtiendo tu while bucle en un do/while bucle:

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());
}

O simplemente tener el while loop, con una variable separada para detectar que has visto algunos resultados:

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");
}

(Además, debe usar try-with-resources para cerrar su ResultSet etc., y simplemente imprimir un seguimiento de la pila en la salida estándar casi nunca es la forma adecuada de manejar las excepciones...)