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

Przesyłanie strumieniowe dużych zestawów wyników za pomocą MySQL

Samo ustawienie rozmiaru pobierania nie jest właściwym podejściem. javadoc Statement#setFetchSize() już stwierdza, co następuje:

Daje sterownikowi JDBC podpowiedź ile wierszy należy pobrać z bazy danych

Kierowca może w rzeczywistości zastosować lub zignorować podpowiedź. Niektórzy kierowcy to ignorują, niektórzy stosują go bezpośrednio, niektórzy potrzebują więcej parametrów. Sterownik MySQL JDBC należy do ostatniej kategorii. Jeśli sprawdzisz sterownik MySQL JDBC dokumentacja , zobaczysz następujące informacje (przewiń o 2/3 w dół do nagłówka ResultSet ):

Aby włączyć tę funkcję, musisz utworzyć instancję Statement w następujący sposób:

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);

Przeczytaj całość części dokumentu, opisuje również zastrzeżenia tego podejścia. Oto odpowiedni cytat:

W tym podejściu są pewne zastrzeżenia. Będziesz musiał przeczytać wszystkie wiersze w zestawie wyników (lub je zamknąć), zanim będziesz mógł wysyłać jakiekolwiek inne zapytania dotyczące połączenia, w przeciwnym razie zostanie zgłoszony wyjątek.

(...)

Jeśli wyciąg znajduje się w zakresie transakcji, blokady są zwalniane po zakończeniu transakcji (co oznacza, że ​​wyciąg musi zostać ukończony jako pierwszy). Podobnie jak w przypadku większości innych baz danych, zestawienia nie są kompletne, dopóki wszystkie wyniki oczekujące na zestawienie nie zostaną odczytane lub aktywny zestaw wyników dla zestawienia nie zostanie zamknięty.

Jeśli to nie naprawi OutOfMemoryError (nie Exception ), prawdopodobnie problem polega na tym, że przechowujesz wszystkie dane w pamięci Java zamiast przetwarzać je natychmiast jak tylko pojawią się dane. Wymagałoby to dalszych zmian w kodzie, być może całkowitego przepisania. Odpowiedziałem na podobne pytanie przed tutaj .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie Like In MySQL do operacji wyszukiwania przy użyciu wzorca

  2. WEEK() Przykłady – MySQL

  3. MySQL:@zmienna a zmienna. Co za różnica?

  4. Błąd krytyczny Wordpress:Nieprzechwycony błąd:Wywołanie niezdefiniowanej funkcji mysql_connect() w /wp-includes/wp-db.php:1570

  5. Jak mogę obejść MySQL Errcode 13 za pomocą SELECT INTO OUTFILE?