2008-11-17 41 views
7

Tôi đang viết một ứng dụng phải được cấu hình để kết nối với Oracle, SQL Server và MySQL tùy thuộc vào ứng dụng khách.Mẫu để kết nối với các cơ sở dữ liệu khác nhau bằng cách sử dụng JDBC

Cho đến giờ tôi đã lên kế hoạch sử dụng cầu JDBC-ODBC và chỉ kết nối với cơ sở dữ liệu bằng các chuỗi kết nối khác nhau.

Tôi nói điều này không hiệu quả lắm.

  1. Có mẫu hay phương pháp hay nhất để kết nối với nhiều hệ thống cơ sở dữ liệu không? Hoặc để chọn trình điều khiển để sử dụng?

  2. Tôi có nên định cấu hình không? nhưng bao gồm cả ba trình điều khiển hoặc xây dựng ba máy khách riêng biệt?

Tôi không làm gì phức tạp chỉ bơm (chèn) dữ liệu vào cơ sở dữ liệu từ luồng sự kiện.

Trả lời

7

Tôi khuyên bạn nên đặt cấu hình và bao gồm ba trình điều khiển. Bạn có thể sử dụng một mẫu như thế này: Tạo một lớp siêu (cho phép gọi nó là DAO) cung cấp chức năng kết nối với cơ sở dữ liệu. Điều này có thể trừu tượng.

Tạo một lớp con cụ thể cho từng loại cơ sở dữ liệu mà bạn muốn kết nối. Vì vậy, bạn có thể kết thúc với MySQLDAO, MSSQLDAO và OracleDAO. mỗi người sẽ tải trình điều khiển tương ứng và sử dụng chuỗi kết nối tương ứng của nó.

Tạo một lớp khác (cho phép gọi nó là DAOFactory) với phương thức getDAO (DB) sẽ tạo ra một cá thể của DAO tùy thuộc vào giá trị của DB.

Vì vậy, ví dụ (trong giả):

if(DB.equals("MySQL")){ 
    DAO = new MySQLDAO(); 
} 
return DAO; 

Vì vậy, bất kỳ mã mà cần phải kết nối với cơ sở dữ liệu sẽ gọi DAOFactory và yêu cầu cho một trường hợp DAO. Bạn có thể lưu trữ giá trị DB trong một tệp bên ngoài (như tệp thuộc tính) để bạn không phải sửa đổi mã để thay đổi kiểu cơ sở dữ liệu.

cách này mã của bạn không cần biết loại cơ sở dữ liệu nào đang kết nối và nếu bạn quyết định hỗ trợ loại cơ sở dữ liệu thứ tư sau này, bạn sẽ phải thêm một lớp nữa và sửa đổi DAOFactory, chứ không phải phần còn lại mã của bạn.

2

Nếu bạn cần bất cứ điều gì phức tạp, Hibernate là một lựa chọn tốt.

nếu không, những gì tôi sẽ làm là lưu trữ chi tiết kết nối của bạn trong tệp thuộc tính (hoặc một số dạng cấu hình khác) - cụ thể là: tên lớp trình điều khiển, url JDBC, tên người dùng và mật khẩu.

Sau đó, tất cả những gì bạn cần làm là tải chi tiết kết nối từ tệp thuộc tính của bạn và bao gồm tệp JAR chính xác trên đường dẫn lớp của bạn và bạn đã hoàn tất. Bạn có thể sử dụng thư viện như Commons-DBCP nếu bạn muốn cấu hình dễ dàng hơn một chút nhưng khác với tất cả những gì bạn cần làm (miễn là các câu lệnh SQL của bạn hoạt động trên mọi cơ sở dữ liệu).

1

Hãy xem Datasource. Đây là cơ chế ưu tiên để có được kết nối cơ sở dữ liệu.

IMO điều này cung cấp cho quản trị viên sự linh hoạt lớn nhất để chọn cơ sở dữ liệu, kết nối tổng hợp và chiến lược giao dịch.

Nếu bạn đang sử dụng tomcat, hãy xem here để biết cách đăng ký Nguồn dữ liệu với JNDI của tomcat.

Nếu bạn đang sử dụng Mùa xuân, bạn có thể lấy Nguồn dữ liệu bằng cách sử dụng jee:jndi-lookup.

Nếu bạn đang sử dụng Spring, nhưng không muốn sử dụng JNDI, hãy xem DriverManagerDataSource để thảo luận về cách lấy Datasource gộp (DBCP hoặc C3P0).

+0

Liên kết bạn đã cung cấp cho nguồn dữ liệu đang cung cấp 404! –

+0

Đã sửa các liên kết. Cảm ơn Paresh. – toolkit

2

Nếu bạn cẩn thận (và bạn kiểm tra), bạn có thể làm điều này với JDBC thẳng và chỉ thay đổi lớp trình điều khiển và thông tin kết nối. Bạn chắc chắn muốn tránh xa cây cầu JDBC-ODBC vì nó thường chậm và không đáng tin cậy. Cây cầu có nhiều khả năng cư xử khác nhau trên dbs hơn JDBC.

Tôi nghĩ đường dẫn DAO là quá mức cần thiết nếu yêu cầu của bạn đơn giản như được liệt kê.

Nếu bạn đang thực hiện nhiều thao tác chèn, bạn có thể muốn điều tra các câu lệnh đã chuẩn bị và cập nhật theo lô vì chúng hiệu quả hơn rất nhiều. Điều này có thể kết thúc là ít di động - khó nói mà không cần kiểm tra.

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