Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL ResultSet с възможност за превъртане/актуализация не работи според очакванията

Както отбелязва Марк Роттивел в коментар към въпроса, MySQL кешира ResultSet данни по подразбиране (също обсъждано в статия в блога на Бен Дж. Кристенсен тук ). Очевиден страничен ефект от това кеширане е, че MySQL Connector/J ще „надстрои“ TYPE_FORWARD_ONLY ResultSet, за да може действително да може да се превърта:

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

показва

Current row number: 3
Current row number: 2

Според статията в блога, цитирана по-горе, начинът за предотвратяване на кеширане и "поточно предаване" на ResultSet данните е да използвате 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());
}

което води до

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. MYSQL цикъл на курсора, изпълнява един допълнителен кръг, защо?

  2. 10 полезни съвета за настройка на производителността на MySQL

  3. Как да ограничим броя на редовете, които могат да се съхраняват в таблицата на mysql?

  4. Какъв е методът за криптиране на парола по подразбиране на Drupal?

  5. Как да заявя sql с активен запис за дати между определени времена