Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Unikanie pomijania wiersza Przez next() Metoda zestawu wyników

Najpierw przestań budować SQL w ten sposób - użyj sparametryzowanego SQL i PreparedStatement . Twój obecny kod jest podatny na ataki typu SQL injection.

Zasadniczo nie wywołuj rs.next() dwa razy z rzędu (najpierw w if następnie w while )... możesz to łatwo zrobić, konwertując swój while pętla do do/while pętla:

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

Lub po prostu mieć while pętla z osobną zmienną do wykrywania, że ​​widziałeś niektóre wyniki:

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

(Dodatkowo powinieneś użyć try-with-resources, aby zamknąć ResultSet itp., a samo drukowanie śladu stosu na standardowe wyjście prawie nigdy nie jest odpowiednim sposobem obsługi wyjątków...)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zdalny dostęp do Mysql 8

  2. ('SQL zawiera 0 znaczników parametrów, ale podano 50 parametrów', 'HY000') lub TypeError:obiekt 'tuple' nie jest wywoływalny

  3. Połączenie MySQL RDS i JDBC SSL daje błąd:nie można znaleźć prawidłowej ścieżki certyfikacji do żądanego celu

  4. Pomoc MySQL:Zoptymalizuj zapytanie aktualizacyjne, które ustawia rangę zgodnie z kolejnością innej kolumny

  5. jak zapytanie z dwóch tabel?