Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL ResultSet yang dapat digulir/dapat diperbarui tidak berfungsi seperti yang diharapkan

Seperti yang disebutkan Mark Rotteveel dalam komentar untuk pertanyaan, MySQL menyimpan data ResultSet secara default (juga dibahas dalam artikel blog olehBen J. Christensen di sini ). Efek samping yang jelas dari caching ini adalah MySQL Connector/J akan "meningkatkan" TYPE_FORWARD_ONLY ResultSet agar benar-benar dapat digulir:

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

menampilkan

Current row number: 3
Current row number: 2

Menurut artikel blog yang dikutip di atas, cara untuk mencegah caching dan "streaming" data ResultSet adalah dengan menggunakan 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());
}

mengakibatkan

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. Apakah mysql_real_escape_string() SEPENUHNYA melindungi terhadap injeksi SQL?

  2. Tidak dapat membuat PoolableConnectionFactory (Akses ditolak untuk pengguna ''@'localhost'

  3. Pemecahan Masalah:Kesalahan MySQL/MariaDB #1044 Е Akses Ditolak untuk Pengguna

  4. Kesalahan ETIMEDOUT saat menanyakan database mysql

  5. opsi mysqldump tidak diketahui tidak ada bunyi bip