2010-04-08 32 views
5

Câu hỏi đơn giản: cách hiệu quả hơn để truy cập vào một db trong Java/JDBC là gì? Tôi là người phát triển web và tôi muốn viết một số mã có thể tái sử dụng và có thể mở rộng.
Điều gì là thú vị đối với tôi là việc sử dụng các công cụ như ResultSupport: nó có quá rộng về mặt sử dụng tài nguyên không?
Bạn có thể đề xuất điều gì?Chiến lược hiệu quả Java để truy cập DB

Trả lời

5

Không chỉ JDBC cụ thể, chỉ nói chung thứ SQL

  1. Nếu bạn phải chạy lại một truy vấn nhiều lần, sử dụng PreparedStatement. Sử dụng thủ tục lưu sẵn nếu nó có sẵn. Điều này rõ ràng là không di động để YMMV.

  2. Luôn đóng ResultSet hoặc Statement nếu bạn không sử dụng nó. Việc đóng một bản Tuyên Bố sẽ tự động đóng tất cả ResultSet được liên kết với Bản Tuyên Bố. Tuy nhiên nó là một thói quen tốt để đóng ResultSet.

  3. Cố gắng hạn chế những gì có thể được truy vấn ví dụ: chọn * từ các đơn hàng trong đó order_date giữa XXX và yyy. Trong MySQL, truy vấn có thể là quét toàn bộ bảng hoặc 'phạm vi' tùy thuộc vào lượng dữ liệu được trả về. Vì vậy, hãy quyết định cách 'linh hoạt' bạn muốn truy vấn của mình là

  4. Nếu bạn đang sử dụng MySQL, hãy sử dụng giải thích để tối ưu hóa truy vấn của bạn. Nếu bạn đang sử dụng JPA, thì bạn sẽ không thấy SQL được tạo ra. (Đây không phải là đúng JDBC) Bạn có thể muốn bật ghi nhật ký trên trình quản lý ORM để hiển thị câu lệnh SQL được sử dụng. Sau đó sử dụng giải thích để tối ưu hóa điều đó.Bạn có thể muốn sử dụng @NamedNativeQuery nếu ORM tạo truy vấn thực sự phức tạp

  5. Nếu trình điều khiển JDBC của bạn hỗ trợ cập nhật hàng loạt thì hãy sử dụng. Cập nhật hàng loạt được hỗ trợ trong PreparedStatement và ResultSet.

  6. Bạn cũng có thể kiểm soát cam kết. Tốt nên tắt nó đi nếu bạn đang thực hiện rất nhiều cập nhật. Cuộc gọi cam kết() chính bạn.

-1

Tôi nghĩ cách dễ nhất và phổ biến nhất là sử dụng SpringJDBCTemplate của chúng.

Cách tiếp cận tốt nhất có thể phụ thuộc vào chồng bạn đang sử dụng để tạo ứng dụng web của bạn. Nếu bạn bắt đầu làm mới thì Spring là một cách tốt để đi.

+0

Và đối với khả năng mở rộng, hãy sử dụng 'DataSource' được gộp lại tra cứu từ JNDI. – gustafc

0

Điều rất quan trọng là sử dụng luôn hồ bơi kết nối DataSource chẳng hạn như c3p0.

0

Có một dự án ánh xạ các đối tượng java vào cơ sở dữ liệu mysql. Azirt.

0

Sử dụng kết nối tổng hợp (hoặc một từ container của bạn hoặc một hồ bơi kết nối độc lập như c3p0 hoặc DBCP) và một cái gì đó giống như DBUtils hoặc của mùa xuân JdbcTemplate.

1

Câu trả lời hay nhất cho câu hỏi đơn giản này là: "nó phụ thuộc".

Có nhiều API bạn có thể sử dụng để truy cập cơ sở dữ liệu. Gần như tất cả chúng sẽ sử dụng API JDBC làm phương tiện của chúng để giao tiếp với cơ sở dữ liệu. Vì vậy, về mặt lý thuyết, không có gì có thể đánh bại JDBC cấp thấp thô (giống như mã máy là lý thuyết luôn nhanh hơn các ngôn ngữ lập trình cao cấp).

Nhưng khi bạn cũng muốn viết mã có thể tái sử dụng, tôi khuyên bạn nên xem xét JPA. Đó là các tiêu chuẩn Java cho sự kiên trì đối tượng đối với cơ sở dữ liệu quan hệ. Hiệu suất của nó khá tốt và rất linh động.

Vì JPA chỉ là một đặc điểm kỹ thuật, bạn có thể chọn bạn đang thực hiện riêng: Hibernate, OpenJPA hoặc bất kỳ máy chủ Java EE tuân thủ nào.

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