Có thể sử dụng một người nào đó giải thích cách phối hợp kết nối chuẩn bị chính xác bằng cách sử dụng dbcp không? (với một số mã ví dụ nếu có thể). Tôi đã tìm ra cách để bật nó - truyền KeyedObjectPoolFactory đến PoolableConnectionFactory. Nhưng làm thế nào các báo cáo chuẩn bị cụ thể được xác định sau đó? Ngay bây giờ tôi chỉ sử dụng PoolingDataSource để nhận các kết nối từ nhóm. Làm thế nào để tôi sử dụng các báo cáo chuẩn bị từ hồ bơi?Sử dụng phối hợp PreparedStatement trong dbcp
Trả lời
Cũng nói về việc kết nối từ hồ bơi với kết nối "không được gộp", bạn có bất kỳ thay đổi nào trong mã của mình không :)? Tôi đặt cược bạn không. Cùng một cách với báo cáo chuẩn bị. Mã của bạn không nên thay đổi. Vì vậy, không có ví dụ mã hữu ích cho việc này.
Bạn nên đọc tài liệu để triển khai Nguồn dữ liệu JDBC của bạn và xem những gì các nhà phát triển phải nói về tổng hợp. Không có nguồn thông tin đáng tin cậy nào khác về điều này.
Từ here: Thành phần này cũng có khả năng để lập nhóm PreparedStatements. Khi kích hoạt một hồ bơi tuyên bố sẽ được tạo ra cho mỗi kết nối và PreparedStatements tạo ra bởi một trong những phương pháp sau đây sẽ được gộp lại:
* public PreparedStatement prepareStatement(String sql)
* public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)
Vì vậy, bạn chỉ cần tiếp tục sử dụng prepareStatement() gọi và DBCP của bạn sẽ về mặt lý thuyết chăm sóc gộp (tức là nếu bạn đang cố tạo "chọn * từ người dùng u nơi u.name như: id", nó sẽ cố gắng tìm câu lệnh này trong hồ bơi trước)
Thật sao? Vậy tại sao PoolableConnectionFactory lại có tham số cho việc gộp nhóm? Rõ ràng phải có một số cách để thiết lập nó. Apache - như thường lệ - không giúp được gì. – sproketboy
@Dan: Bạn có muốn mở rộng nhận xét của mình không? Phần nào trong câu trả lời của tôi mà bạn không đồng ý? Nếu bạn đọc lại câu hỏi, tác giả _already knows_ cách bật tính năng tổng hợp cho các câu lệnh. Anh ta đang tự hỏi về những thay đổi mà anh ta cần phải thực hiện trong mã, nếu có. –
Xin lỗi là chỉ có tính cáu kỉnh do thiếu tài liệu thông thường tại Apache. – sproketboy
Đây là mã cơ bản tôi sử dụng.
GenericObjectPool connectionPool = new GenericObjectPool(null);
connectionPool.setMinEvictableIdleTimeMillis(1000 * 60 * 30);
connectionPool.setTimeBetweenEvictionRunsMillis(1000 * 60 * 30);
connectionPool.setNumTestsPerEvictionRun(3);
connectionPool.setTestOnBorrow(true);
connectionPool.setTestWhileIdle(false);
connectionPool.setTestOnReturn(false);
props = new Properties();
props.put("user", username);
props.put("password", password);
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(url, props);
PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, connectionPool, null, "SELECT 1", false, true);
PoolingDataSource dataSource = new PoolingDataSource(connectionPool);
Điều này không thể đúng. Việc bỏ qua null cho đối số thứ ba của PoolableConnectionFactory sẽ vô hiệu hóa bộ đệm ẩn PreparedStatement, theo http://commons.apache.org/dbcp/apidocs/org/apache/commons/dbcp/PoolableConnectionFactory.html#PoolableConnectionFactory(org.apache.commons.dbcp. ConnectionFactory, org.apache.commons.pool.ObjectPool, org.apache.commons.pool.KeyedObjectPoolFactory, java.lang.String, boolean, boolean). Điều gì nên được sử dụng cho đối số đó? –
Vấn đề là nếu bạn sử dụng một đơn Connection
, nó sẽ lưu PreparedStatement
s cho dù bạn muốn điều này hay không, cách duy nhất có thể ảnh hưởng về vấn đề này là sử dụng DataSource
tài sản hoặc sử dụng nhà cung cấp cụ API. Nhưng những câu lệnh này không được hiển thị bởi các kết nối khác và nếu bạn chuẩn bị cùng một câu lệnh bằng cách sử dụng một kết nối khác, nó sẽ tái tạo lại nó. Vì vậy, các nhóm kết nối như DBCP dưới mui xe cho phép tái sử dụng các kết nối khác nhau của PreparedStatement
(nó sử dụng giao diện PooledConnection
thay vì đơn giản Connection
), chúng theo dõi tất cả các câu lệnh được chuẩn bị bởi tất cả các kết nối.
CẬP NHẬT: có vẻ như tôi đã sai về thông tin này, ít nhất tôi không thể tìm thấy chức năng này trong C3P0.
- 1. Sử dụng lại PreparedStatement nhiều lần
- 2. Không thể sử dụng truy vấn LIKE trong JDBC PreparedStatement?
- 3. Cấu hình Tomcat bằng cách sử dụng DBCP
- 4. Pooling PreparedStatement trên Tomcat với MySQL
- 5. cách sử dụng (useUnicode = yes characterEncoding = UTF-8) với DBCP
- 6. Sử dụng lại một PreparedStatement giữa các phương pháp?
- 7. Đa luồng với Apache DBCP
- 8. DBCP: removeAbandoned VS đuổi
- 9. JPA Hibernate DBCP Tomcat OutOfMemory
- 10. Kết nối DBCP Pool loginTimeout
- 11. setObject() của PreparedStatement
- 12. PreparedStatement với Statement.RETURN_GENERATED_KEYS
- 13. Chức năng phối hợp Clojure
- 14. Sử dụng Bộ điều phối C#
- 15. PreparedStatement và setTimestamp trong oracle jdbc
- 16. Không thể lưu trữ nội dung UTF-8 trong MySQL Sử dụng Java PreparedStatement
- 17. Thiết kế ứng dụng Java OSGi bằng RabbitMQ khi đang sử dụng PreparedStatement
- 18. lợi nhuận DBCP đóng kết nối
- 19. phối cảnh 3D trong iphone trò chơi sử dụng cocos2d
- 20. Lấy UserLocation Phối hợp với MapKit
- 21. Cách thích hợp để xử lý các kết nối JDBC với Spring và DBCP là gì?
- 22. Hệ thống hạt libgdx Z phối hợp
- 23. Ràng buộc một biến rỗng trong một PreparedStatement
- 24. .giao phối chiến lược hợp nhất
- 25. Cách phối hợp y dưới cùng là
- 26. Chèn dữ liệu blob vào Java bằng cách sử dụng PreparedStatement
- 27. Nhân vật nào sẽ PreparedStatement thoát?
- 28. Phối hợp 1/w trong gl_FragCoord là gì?
- 29. nhanh hơn? Bản Tuyên Bố hoặc PreparedStatement
- 30. Akka :: phối [% name%] không được cấu hình, sử dụng mặc định-điều phối
Bạn đang chuyển cho KeyedObjectPoolFactory? Phương thức khởi tạo cho GenericKeyedObjectPoolFactory yêu cầu một KeyedPoolableObjectFactory và tôi không thấy cách tạo một trong những cái sẽ sử dụng Connection the PreparedStatement. –