JDBC - Kết nối cơ sở dữ liệu

Sau khi bạn đã cài đặt trình điều khiển thích hợp, đã đến lúc thiết lập kết nối cơ sở dữ liệu bằng JDBC.

Lập trình liên quan để thiết lập kết nối JDBC khá đơn giản. Đây là bốn bước đơn giản sau:

  • Import JDBC Packages: Thêm vào import câu lệnh vào chương trình Java của bạn để nhập các lớp bắt buộc trong mã Java của bạn.

  • Register JDBC Driver: Bước này khiến JVM tải triển khai trình điều khiển mong muốn vào bộ nhớ để nó có thể đáp ứng các yêu cầu JDBC của bạn.

  • Database URL Formulation: Điều này là để tạo một địa chỉ được định dạng thích hợp trỏ đến cơ sở dữ liệu mà bạn muốn kết nối.

  • Create Connection Object:Cuối cùng, viết mã lệnh gọi phương thức getConnection () của đối tượng DriverManager để thiết lập kết nối cơ sở dữ liệu thực tế.

Nhập các gói JDBC

Các Import các câu lệnh cho trình biên dịch Java biết nơi tìm các lớp mà bạn tham chiếu trong mã của mình và được đặt ở đầu mã nguồn của bạn.

Để sử dụng gói JDBC tiêu chuẩn, cho phép bạn chọn, chèn, cập nhật và xóa dữ liệu trong bảng SQL, hãy thêm các lần nhập sau vào mã nguồn của bạn -

import java.sql.* ;  // for standard JDBC programs
import java.math.* ; // for BigDecimal and BigInteger support

Đăng ký trình điều khiển JDBC

Bạn phải đăng ký trình điều khiển trong chương trình của mình trước khi sử dụng. Đăng ký trình điều khiển là quá trình mà tệp lớp trình điều khiển Oracle được tải vào bộ nhớ, vì vậy nó có thể được sử dụng như một triển khai của các giao diện JDBC.

Bạn chỉ cần thực hiện việc đăng ký này một lần trong chương trình của mình. Bạn có thể đăng ký tài xế bằng một trong hai cách.

Phương pháp tiếp cận I - Class.forName ()

Cách tiếp cận phổ biến nhất để đăng ký trình điều khiển là sử dụng Class.forName()để tự động tải tệp lớp của trình điều khiển vào bộ nhớ, tệp này sẽ tự động đăng ký. Phương pháp này thích hợp hơn vì nó cho phép bạn đặt cấu hình đăng ký trình điều khiển và di động.

Ví dụ sau sử dụng Class.forName () để đăng ký trình điều khiển Oracle:

try {
   Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch(ClassNotFoundException ex) {
   System.out.println("Error: unable to load driver class!");
   System.exit(1);
}

Bạn có thể dùng getInstance() phương pháp để giải quyết các JVM không tuân thủ, nhưng sau đó bạn sẽ phải viết mã cho hai Ngoại lệ bổ sung như sau:

try {
   Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
}
catch(ClassNotFoundException ex) {
   System.out.println("Error: unable to load driver class!");
   System.exit(1);
catch(IllegalAccessException ex) {
   System.out.println("Error: access problem while loading!");
   System.exit(2);
catch(InstantiationException ex) {
   System.out.println("Error: unable to instantiate driver!");
   System.exit(3);
}

Phương pháp tiếp cận II - DriverManager.registerDriver ()

Cách tiếp cận thứ hai bạn có thể sử dụng để đăng ký trình điều khiển, là sử dụng DriverManager.registerDriver() phương pháp.

Bạn nên sử dụng phương thức registerDriver () nếu bạn đang sử dụng JVM không tuân thủ JDK, chẳng hạn như phương thức do Microsoft cung cấp.

Ví dụ sau sử dụng registerDriver () để đăng ký trình điều khiển Oracle:

try {
   Driver myDriver = new oracle.jdbc.driver.OracleDriver();
   DriverManager.registerDriver( myDriver );
}
catch(ClassNotFoundException ex) {
   System.out.println("Error: unable to load driver class!");
   System.exit(1);
}

Công thức URL cơ sở dữ liệu

Sau khi đã tải trình điều khiển, bạn có thể thiết lập kết nối bằng cách sử dụng DriverManager.getConnection()phương pháp. Để dễ tham khảo, hãy để tôi liệt kê ba phương thức DriverManager.getConnection () bị quá tải -

  • getConnection (Url chuỗi)

  • getConnection (String url, Properties prop)

  • getConnection (Chuỗi url, Người dùng chuỗi, Mật khẩu chuỗi)

Ở đây mỗi biểu mẫu yêu cầu một cơ sở dữ liệu URL. URL cơ sở dữ liệu là một địa chỉ trỏ đến cơ sở dữ liệu của bạn.

Tạo URL cơ sở dữ liệu là nơi hầu hết các vấn đề liên quan đến việc thiết lập kết nối xảy ra.

Bảng sau liệt kê các tên trình điều khiển JDBC phổ biến và URL cơ sở dữ liệu.

RDBMS Tên trình điều khiển JDBC Định dạng URL
MySQL com.mysql.jdbc.Driver jdbc:mysql://hostname / databaseName
ORACLE oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@tên máy chủ: số cổng: databaseName
DB2 COM.ibm.db2.jdbc.net.DB2Driver jdbc:db2:tên máy chủ: Số cổng / tên cơ sở dữ liệu
Sybase com.sybase.jdbc.SybDriver jdbc:sybase:Tds:tên máy chủ: Số cổng / tên cơ sở dữ liệu

Tất cả phần được đánh dấu ở định dạng URL là tĩnh và bạn chỉ cần thay đổi phần còn lại theo thiết lập cơ sở dữ liệu của mình.

Tạo đối tượng kết nối

Chúng tôi đã liệt kê ra ba hình thức DriverManager.getConnection() để tạo một đối tượng kết nối.

Sử dụng URL cơ sở dữ liệu với tên người dùng và mật khẩu

Dạng getConnection () được sử dụng phổ biến nhất yêu cầu bạn chuyển URL cơ sở dữ liệu, tên người dùngmật khẩu :

Giả sử bạn đang sử dụng Oracle's thin trình điều khiển, bạn sẽ chỉ định giá trị host: port: databaseName cho phần cơ sở dữ liệu của URL.

Nếu bạn có máy chủ lưu trữ tại địa chỉ TCP / IP 192.0.0.1 với tên máy chủ là amrood và trình nghe Oracle của bạn được định cấu hình để lắng nghe trên cổng 1521 và tên cơ sở dữ liệu của bạn là EMP, thì URL cơ sở dữ liệu hoàn chỉnh sẽ là:

jdbc:oracle:thin:@amrood:1521:EMP

Bây giờ bạn phải gọi phương thức getConnection () với tên người dùng và mật khẩu thích hợp để có được Connection đối tượng như sau -

String URL = "jdbc:oracle:thin:@amrood:1521:EMP";
String USER = "username";
String PASS = "password"
Connection conn = DriverManager.getConnection(URL, USER, PASS);

Chỉ sử dụng một URL cơ sở dữ liệu

Dạng thứ hai của phương thức DriverManager.getConnection () chỉ yêu cầu một URL cơ sở dữ liệu -

DriverManager.getConnection(String url);

Tuy nhiên, trong trường hợp này, URL cơ sở dữ liệu bao gồm tên người dùng và mật khẩu và có dạng chung sau:

jdbc:oracle:driver:username/password@database

Vì vậy, kết nối trên có thể được tạo như sau:

String URL = "jdbc:oracle:thin:username/password@amrood:1521:EMP";
Connection conn = DriverManager.getConnection(URL);

Sử dụng URL cơ sở dữ liệu và đối tượng thuộc tính

Dạng thứ ba của phương thức DriverManager.getConnection () yêu cầu URL cơ sở dữ liệu và đối tượng Thuộc tính -

DriverManager.getConnection(String url, Properties info);

Đối tượng Thuộc tính chứa một tập hợp các cặp từ khóa-giá trị. Nó được sử dụng để chuyển các thuộc tính của trình điều khiển cho trình điều khiển trong khi gọi phương thức getConnection ().

Để tạo kết nối tương tự như các ví dụ trước, hãy sử dụng mã sau:

import java.util.*;

String URL = "jdbc:oracle:thin:@amrood:1521:EMP";
Properties info = new Properties( );
info.put( "user", "username" );
info.put( "password", "password" );

Connection conn = DriverManager.getConnection(URL, info);

Đóng kết nối JDBC

Vào cuối chương trình JDBC của bạn, bạn phải đóng tất cả các kết nối đến cơ sở dữ liệu một cách rõ ràng để kết thúc mỗi phiên cơ sở dữ liệu. Tuy nhiên, nếu bạn quên, trình thu gom rác của Java sẽ đóng kết nối khi nó dọn dẹp các đối tượng cũ.

Dựa vào bộ sưu tập rác, đặc biệt là trong lập trình cơ sở dữ liệu, là một thực hành lập trình rất kém. Bạn nên tạo thói quen luôn đóng kết nối bằng phương thức close () được liên kết với đối tượng kết nối.

Để đảm bảo rằng kết nối đã được đóng, bạn có thể cung cấp khối 'cuối cùng' trong mã của mình. Một khối cuối cùng luôn thực thi, bất kể có ngoại lệ xảy ra hay không.

Để đóng kết nối đã mở ở trên, bạn nên gọi phương thức close () như sau:

conn.close();

Việc đóng kết nối một cách rõ ràng sẽ bảo toàn các tài nguyên DBMS, điều này sẽ làm cho người quản trị cơ sở dữ liệu của bạn hài lòng.

Để hiểu rõ hơn, chúng tôi khuyên bạn nên nghiên cứu hướng dẫn JDBC - Mã mẫu của chúng tôi .