Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL ResultSet có thể cuộn / cập nhật được không hoạt động như mong đợi

Như Mark Rotteveel đề cập trong một nhận xét cho câu hỏi, MySQL lưu trữ dữ liệu ResultSet theo mặc định (cũng được thảo luận trong một bài báo trên blog của Ben J. Christensen tại đây ). Một tác dụng phụ rõ ràng của bộ nhớ đệm này là MySQL Connector / J sẽ "nâng cấp" TYPE_FORWARD_ONLY ResultSet để thực sự có thể cuộn được:

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

hiển thị

Current row number: 3
Current row number: 2

Theo bài viết blog được trích dẫn ở trên, cách để ngăn chặn bộ nhớ đệm và "truyền trực tuyến" dữ liệu ResultSet là sử dụng 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());
}

dẫn đến

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. lưu trữ dữ liệu JSON trong mysql

  2. triển khai truy vấn LIKE trong PDO

  3. câu hỏi dấu phân cách mysql

  4. Phân tích cú pháp một chuỗi XML trong MySQL

  5. Làm cách nào để lấy các khóa ngoại của một bảng trong mysql