2009-07-30 17 views
5

Khung công tác Spring có hai lớp tương tự nhau: JdbcTemplate là lớp Java 1,4 cũ và SimpleJdbcTemplate mới hơn, với các phương thức đẹp hơn.Làm cách nào để đặtQueryTimeout trên SimpleJdbcTemplate?

JdbcTemplate có phương thức setQueryTimeout, về cơ bản cho phép tôi truy cập vào một phương thức có cùng tên trên đối tượng Statement bên dưới.

Có cách nào để thực hiện điều gì đó tương tự với SimpleJdbcTemplate không?

Giải pháp: Dựa trên câu trả lời skaffman, tôi tạo ra SimpleJdbcTemplate đối tượng bản thân mình từ một JdbcTemplate, vì vậy bây giờ tôi có thể làm bất cứ điều gì tôi muốn. Mã số:

JdbcTemplate jdbcTemplate = this.getJdbcTemplate(); 
jdbcTemplate.setQueryTimeout(30); 
SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(jdbcTemplate); 

Một chút, nhưng hoàn thành công việc.

Cập nhật: Điều này thực sự phức tạp hơn mức cần thiết. Xem câu trả lời.

+0

Có thể phức tạp hơn mức cần thiết, xem câu trả lời đã chỉnh sửa của tôi. – skaffman

+0

Đơn vị thời gian chờ truy vấn là gì? – akirekadu

+0

@akirekadu - giây. – itsadok

Trả lời

4

SimpleJdbcTemplat e không phải là một thay thế cho JdbcTemplate, nó chỉ là một bổ sung java5 thân thiện với nó, cho một số hoạt động có thể tận dụng tốt nhất của varargs và generics.

Nếu bạn nhìn vào nguồn cho SimpleJdbcTemplate, bạn sẽ thấy rằng nó ủy quyền tất cả công việc của nó cho một đối tượng JdbcTemplate và bằng cách đặt thời gian chờ (hoặc các tùy chọn khác) trên JdbcTemplate, bạn ngầm đặt chúng trên SimpleJdbcTemplate.

Nếu bạn đang lấy SimpleJdbcTemplate qua SimpleJdbcDaoSupport.getSimpleJdbcTemplate(), thì JdbcTemplate sẽ đã được kết nối đúng cách.

chỉnh sửa:

Ví dụ:

public class MyDao extends SimpleJdbcDaoSupport { 
    public void doStuff() { 
     getJdbcTemplate().setQueryTimeout(x); 
     getSimpleJdbcTemplate().execute(...); 
    } 
} 

Các SimpleJdbcTemplate chứa cùng JdbcTemplate như được lấy ra bởi getJdbcTemplate().

Nếu bạn không mở rộng SimpleJdbcDaoSupport, thì có, bạn cần phải tự xây dựng một SimpleJdbcTemplate mình.

+0

Nhưng làm thế nào để tôi truy cập JdbcTemplate thats "bị mắc kẹt" bên trong SimpleJdbcTemplate? Tất cả tôi có là truy cập vào một giao diện JdbcOperations, mà không có setTimeout. Chăm sóc để hiển thị một số mã? – itsadok

+0

Bạn đã không đề cập đến điều đó trong câu hỏi của bạn, bạn đã hỏi về SimpleJdbcTemplate. Vui lòng sửa đổi câu hỏi của bạn để làm rõ những gì bạn thực sự muốn. – skaffman

+0

Không, nhận xét của tôi không rõ ràng. Tôi có nghĩa là có một đối tượng SimpleJdbcTemplate, tất cả những gì tôi có là phương thức 'getJdbcOperations()'. Không có phương thức 'getUnderlyingJdbcTemplate()'. – itsadok

Các vấn đề liên quan