Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Evitando pular uma linha pelo método next() de ResultSet


Primeiro, pare de construir SQL assim - use SQL parametrizado e um PreparedStatement . Seu código atual é vulnerável a ataques de injeção de SQL.

Basicamente, não chame rs.next() duas vezes seguidas (primeira no if então no while )... você pode fazer isso facilmente convertendo seu while loop em um do/while ciclo:
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());
}

Ou apenas tem o while loop, com uma variável separada para detectar que você viu algumas 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");
}

(Além disso, você deve usar try-with-resources para fechar seu ResultSet etc, e apenas imprimir um rastreamento de pilha para stdout quase nunca é a maneira apropriada de lidar com exceções ...)