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

Przewijalny/aktualizowany zestaw wyników MySQL nie działa zgodnie z oczekiwaniami

Jak wspomina Mark Rotteveel w komentarzu do pytania, MySQL domyślnie buforuje dane z zestawu wyników (omówione również w artykule na blogu autorstwa Bena J. Christensena tutaj ). Widocznym efektem ubocznym tego buforowania jest to, że MySQL Connector/J „zaktualizuje” zestaw wyników TYPE_FORWARD_ONLY, aby można go było przewijać:

Statement s = dbConnection.createStatement(
        ResultSet.TYPE_FORWARD_ONLY, 
        ResultSet.CONCUR_READ_ONLY);
ResultSet rs = s.executeQuery("SELECT * FROM testdata");
rs.last();
System.out.println(String.format("Current row number: %d", rs.getRow()));
rs.previous();
System.out.println(String.format("Current row number: %d", rs.getRow()));

wyświetlacze

Current row number: 3
Current row number: 2

Zgodnie z cytowanym powyżej artykułem na blogu, sposobem na uniknięcie buforowania i „przesyłania strumieniowego” danych zestawu wyników jest użycie Statement.setFetchSize :

Statement s = dbConnection.createStatement(
        ResultSet.TYPE_FORWARD_ONLY, 
        ResultSet.CONCUR_READ_ONLY);
s.setFetchSize(Integer.MIN_VALUE);
ResultSet rs = s.executeQuery("SELECT * FROM testdata");
rs.next();
System.out.println("Data from first row: " + rs.getString(2));
System.out.println("now let's try rs.last() ...");
try {
    rs.last();
    System.out.println("... Okay, done.");
} catch (Exception e) {
    System.out.println("... Exception: " + e.getMessage());
}

w wyniku

Data from first row: Gord
now let's try rs.last() ...
... Exception: Operation not supported for streaming result sets


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Skopiuj tabelę MySQL wraz z indeksami

  2. Błąd:Klient nie obsługuje protokołu uwierzytelniania żądanego przez serwer; rozważ aktualizację klienta MySQL

  3. MySQL przyznaje wszystkie uprawnienia do bazy danych z wyjątkiem jednej tabeli

  4. Jak skonfigurować aplikację Spring Boot, aby używała SSL/TLS przez MySQL?

  5. Xampp MySQL nie uruchamia się — próba uruchomienia usługi MySQL...