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

Truyền trực tuyến tập hợp kết quả lớn với MySQL

Chỉ đặt kích thước tìm nạp không phải là cách tiếp cận chính xác. javadoc của Statement#setFetchSize() đã nêu những điều sau:

Cung cấp cho trình điều khiển JDBC một gợi ý về số hàng sẽ được tìm nạp từ cơ sở dữ liệu

Trình điều khiển thực sự miễn phí để áp dụng hoặc bỏ qua gợi ý. Một số trình điều khiển bỏ qua nó, một số trình điều khiển áp dụng nó trực tiếp, một số trình điều khiển cần thêm thông số. Trình điều khiển MySQL JDBC nằm trong danh mục cuối cùng. Nếu bạn kiểm tra trình điều khiển MySQL JDBC tài liệu , bạn sẽ thấy thông tin sau (cuộn xuống khoảng 2/3 xuống cho đến khi tiêu đề ResultSet ):

Để kích hoạt chức năng này, bạn cần tạo một phiên bản Statement theo cách sau:

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

Vui lòng đọc toàn bộ của tài liệu, nó cũng mô tả những lưu ý của phương pháp này. Đây là một trích dẫn có liên quan:

Có một số lưu ý với cách tiếp cận này. Bạn sẽ phải đọc tất cả các hàng trong tập kết quả (hoặc đóng nó) trước khi bạn có thể đưa ra bất kỳ truy vấn nào khác trên kết nối hoặc một ngoại lệ sẽ được đưa ra.

(...)

Nếu câu lệnh nằm trong phạm vi của một giao dịch, thì các khóa sẽ được phát hành khi giao dịch hoàn thành (ngụ ý rằng câu lệnh cần phải hoàn thành trước). Như với hầu hết các cơ sở dữ liệu khác, các câu lệnh không hoàn thành cho đến khi tất cả các kết quả đang chờ xử lý trên câu lệnh được đọc hoặc tập kết quả hoạt động cho câu lệnh bị đóng.

Nếu điều đó không khắc phục được OutOfMemoryError (không phải Exception ), thì vấn đề có thể là bạn đang lưu trữ tất cả dữ liệu trong bộ nhớ của Java thay vì xử lý nó ngay lập tức ngay khi có dữ liệu. Điều này sẽ yêu cầu nhiều thay đổi hơn trong mã của bạn, có thể là một bản viết lại hoàn chỉnh. Tôi đã trả lời câu hỏi tương tự trước đây tại đây .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm MySQL LEAST () - Tìm đối số nhỏ nhất trong danh sách đối số

  2. Tôi có thể sử dụng một hàm cho giá trị mặc định trong MySql không?

  3. Cách mã hóa lưu lượng truy cập cơ sở dữ liệu đám mây kết hợp

  4. MySQL Chèn vào nhiều bảng? (Chuẩn hóa cơ sở dữ liệu?)

  5. cột cập nhật mysql với giá trị từ bảng khác