sql >> Database teknologi >  >> RDS >> Mysql

Undgå at springe en række over ved hjælp af next() Method of ResultSet

Stop først med at bygge SQL på den måde - brug parameteriseret SQL og en PreparedStatement . Din nuværende kode er sårbar over for SQL-injektionsangreb.

Som udgangspunkt skal du ikke kalde rs.next() to gange i træk (først i if). derefter i while )... du kan nemt gøre det ved at konvertere din while loop ind i en do/while sløjfe:

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

Eller bare har while loop, med en separat variabel for at registrere, at du har set nogle resultater:

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

(Desuden bør du bruge prøv-med-ressourcer til at lukke dit ResultSet osv., og blot at udskrive et stakspor til stdout er næsten aldrig den rigtige måde at håndtere undtagelser på...)



  1. Overtrædelse af integritetsbegrænsningen:1452 laravel

  2. Brugerrolletilladelser til forskellige moduler ved hjælp af bitvise operatorer

  3. Erklære variabel i Bash?

  4. Fremmednøgle, der refererer til en visning i Oracle