2009-04-01 33 views
7

Có hai cách để tải một trình điều khiển:Phương pháp nào tốt hơn để tải trình điều khiển JDBC?

  1. Class.forName()

  2. DriverManager.registerDriver()

Phương pháp 1 trong nội bộ cũng kêu gọi DriverManager.registerDriver và phương pháp 1 là cách ưa thích.

Nhưng tại sao? Có bất kỳ sự khác biệt nhỏ hoặc là hiệu suất vv tốt hơn?
Bất kỳ chế độ xem nào được đánh giá cao ..

Trả lời

3

Nếu bạn sử dụng Class.forName(), thì bạn không bắt buộc phải có bất kỳ phụ thuộc biên dịch nào trên một trình điều khiển JDBC cụ thể. Điều này đặc biệt hữu ích khi bạn đang viết mã có thể làm việc với nhiều cơ sở dữ liệu.

Xét đoạn mã sau:

// Register the PostgreSQL driver 
Class.forName("org.postgresql.Driver"); 

Bây giờ so sánh nó với:

import org.postgresql.Driver; 

// Register the PostgreSQL driver 
DriverManager.registerDriver(new Driver()); 

Và xem xét rằng trong ví dụ đầu tiên, tên lớp có thể cũng đã đến từ nộp tài sản, tập tin XML , v.v., tùy thuộc vào những gì thuận tiện cho ứng dụng của bạn.

1

Đọc JavaDoc có vẻ như Class.forName bắt đầu và sau đó mọi thứ đã thay đổi để nó không còn được ưa thích nữa (hoặc cách bắt buộc).

+0

Um ... Tôi không nghĩ rằng liên kết đó là chính xác. –

+0

cố định, cảm ơn (Tôi đã đọc lên những gì nó đã nói và tôi đoán tôi quên lấy lại liên kết :-) – TofuBeer

1

Tôi phải nói, cuộc sống của bạn sẽ dễ dàng hơn nhiều nếu bạn xây dựng một cá thể trình điều khiển bằng cách tham chiếu tĩnh trình điều khiển. Một khi bạn có điều đó, bạn có thể bỏ qua DriverManager mà làm cho cái ác.

2

JDBC API Tutorial and Reference là tham chiếu tốt nhất cho các câu hỏi như vậy, section of which addresses the role played by the Driver and DriverManager classes.

Tất cả các lớp trình điều khiển được yêu cầu có bộ khởi tạo tĩnh chịu trách nhiệm tạo một phiên bản của trình điều khiển đó và đăng ký nó với DriverManager khi lớp Driver được tải.

Ngoài ra, DriverManager.getConnection() có lẽ là phương thức thân thiện với người dùng duy nhất trong lớp. Hầu hết các phương thức khác thường không được hầu hết các nhà phát triển sử dụng bằng API JDBC. Vì vậy, câu ngạn ngữ cũ vẫn đứng - sử dụng Class.forName() để tải trình điều khiển, và sau đó sử dụng DriverManager.getConnection() để có được một kết nối đến cơ sở dữ liệu.

1

"là hiệu suất, v.v. tốt hơn?"

Tôi có thể nói rằng hiệu suất cho hoạt động một lần này là ít nhất bạn phải lo lắng.

Nếu bạn đang sử dụng máy chủ ứng dụng Java EE, câu trả lời là "không". Bạn nên thiết lập một hồ bơi kết nối và để cho nó xử lý tải trình điều khiển và phát ra các kết nối.

+0

tôi đồng ý với quan điểm của bạn. – harshit

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