Java: Thiết lập kết nối

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Trước tiên, ta cần thực hiện một kết nối với data source mà ta muốn sử dụng. Data source có thể là DBMS, một hệ thống tập tin cũ, hoặc một số nguồn dữ liệu với trình điều khiển JDBC tương ứng. Thông thường thì một ứng dụng JDBC sẽ kết nối tới nguồn dữ liệu đích bằng cách sử dụng một trong hai lớp sau:

  • DriverManager: Lớp này kết nối ứng dụng với data source được chỉ định bởi một URL cơ sở dữ liệu. Khi lớp này cố gắng thiết lập kết nối đầu tiên, thì nó sẽ tự động tải bất kỳ trình điều khiển JDBC 4.0 nào trong đường dẫn lớp. Lưu ý rằng ứng dụng của bạn phải tải thủ công bất kỳ trình điều khiển JDBC nào trước phiên bản 4.0.

  • DataSource: Giao diện (interface) này được nhiều người ưa thích hơn DriverManager vì nó cho phép các chi tiết về nguồn dữ liệu nền được trong suốt với ứng dụng của bạn. Các thuộc tính của đối tượng DataSource được thiết lập để nó đại diện cho nguồn dữ liệu cụ thể. Xin xem bài viết Kết nối với các đối tượng DataSource để biết thêm thông tin.

Lưu ý: Các ví dụ trong các bài viết phần JDBC này sử dụng lớp DriverManager thay vì sử dụng lớp DataSource bởi vì nó dễ sử dụng hơn và các ví dụ không yêu cầu các đặc tính của lớp DataSource.

Bài viết này trình bày hai chủ đề sau:

Cách sử dụng lớp DriverManager

Để kết nối DBMS với lớp DriverManager thì ta sử dụng phương thức DriverManager.getConnection. Phương thức JDBCTutorialUtilities.getConnection sau đây sẽ thiết lập một kết nối cơ sở dữ liệu:

public Connection getConnection() throws SQLException {

    Connection conn = null;
    Properties connectionProps = new Properties();
    connectionProps.put("user", this.userName);
    connectionProps.put("password", this.password);

    if (this.dbms.equals("mysql")) {
        conn = DriverManager.getConnection(
                   "jdbc:" + this.dbms + "://" +
                   this.serverName +
                   ":" + this.portNumber + "/",
                   connectionProps);
    } else if (this.dbms.equals("derby")) {
        conn = DriverManager.getConnection(
                   "jdbc:" + this.dbms + ":" +
                   this.dbName +
                   ";create=true",
                   connectionProps);
    }
    System.out.println("Đã kết nối được database");
    return conn;
}

Trong ví dụ trên, phương thức DriverManager.getConnection có nhiệm vụ thực hiện kết nối cơ sở dữ liệu. Dưới đây là một số ví dụ về URL cơ sở dữ liệu:

  1. MySQL: jdbc:mysql://localhost:3306/, trong đó localhost là tên của máy chủ lưu trữ cơ sở dữ liệu của bạn, và 3306 là số hiệu cổng.

  2. Java DB: jdbc:derby:testdb;create=true, trong đó testdb là tên của cơ sở dữ liệu kết nối tới, create=true tức là chỉ thị cho DBMS tạo cơ sở dữ liệu.

    Lưu ý: URL này thực hiện một kết nối cơ sở dữ liệu với Trình điều khiển nhúng Java DB. Java DB cũng bao gồm Network Client Driver, trong đó sử dụng một URL khác.

Phương thức getConnection chỉ định tên đăng nhập và mật khẩu để truy cập được vào DBMS với đối tượng của lớp Properties.

Lưu ý:

  • Thông thường thì trong URL cơ sở dữ liệu ta cũng chỉ định tên của cơ sở dữ liệu mà bạn muốn kết nối. Ví dụ như URL jdbc:mysql://localhost:3306/mysql thể hiện URL cơ sở dữ liệu cho cơ sở dữ liệu MySQL có tên mysql. Các ví dụ trong các bài viết của phần JDBC này sử dụng URL mà không chỉ định cơ sở dữ liệu cụ thể bởi vì trong các ví dụ có phần tạo mới cơ sở dữ liệu.

  • Trong các phiên bản JDBC trước thì để có được một kết nối thì trước tiên ta phải khởi tạo trình điều khiển JDBC bằng cách gọi phương thức Class.forName. Phương thức này yêu cầu một đối tượng có kiểu java.sql.Driver. Mỗi trình điều khiển JDBC có chứa một hoặc nhiều lớp thực thi giao diện java.sql.Driver. Các trình điều khiển cho Java DB là  org.apache.derby.jdbc.EmbeddedDriver  và org.apache.derby.jdbc.ClientDriver, và một trình điều khiển cho MySQL Connector/J là com.mysql.jdbc.Driver.

    Bất kỳ trình điều khiển JDBC 4.0 nào được tìm thấy trong phần lớp của ta cũng được tự động tải (tuy nhiên, ta phải tải thủ công các trình điều khiển phiên bản trước JDBC 4.0 với phương thức Class.forName).

Phương thức trả về một đối tượng Connection, nó đại diện cho một kết nối với DBMS hoặc một cơ sở dữ liệu được chỉ định. Các truy vấn cơ sở dữ liệu đều thông qua đối tượng này.

Chỉ định URL kết nối Cơ sở dữ liệu

Một URL kết nối database là một chuỗi mà trình điều khiển DBMS JDBC sử dụng để kết nối tới cơ sở dữ liệu. Nó có thể chứa thông tin như nơi tìm kiếm cơ sở dữ liệu, tên của cơ sở dữ liệu kết nối tới, và các thuộc tính cấu hình. Cú pháp chính xác của URL kết nối database được chỉ định bởi DBMS tương ứng.

URL kết nối cơ sở dữ liệu Java DB

Dưới đây là cú pháp URL kết nối database dành cho Java DB:

jdbc:derby:[subsubprotocol:][databaseName]
    [;attribute=value]*

  • subsubprotocol chỉ định nơi Java DB cần tìm cơ sở dữ liệu, hoặc là ở trong thư mục, trong bộ nhớ, trong đường dẫn lớp, hoặc là trong tập tin JAR. Thường thì ta bỏ qua phần này.
  • databaseName là tên của cơ sở dữ liệu kết nối tới.
  • attribute=value đại diện cho một tùy chọn, dấu (;) làm phần phân cách giữa các thuộc tính. Những thuộc tính này cho phép ta chỉ thị cho Java DB thực hiện các tác vụ khác nhau như sau:
    • Tạo cơ sở dữ liệu được chỉ định trong URL kết nối.
    • Mã hóa cơ sở dữ liệu được chỉ định trong URL kết nối.
    • Chỉ định các thư mục để lưu trữ thông tin logging và dấu vết.
    • Chỉ định tên đăng nhập và mật khẩu để kết nối tới cơ sở dữ liệu.

URL cơ sở dữ liệu MySQL Connector/J

Dưới đây là cú pháp URL kết nối cơ sở dữ liệu của MySQL Connector/J:

jdbc:mysql://[host][,failoverhost...]
    [:port]/[database]
    [?propertyName1][=propertyValue1]
    [&propertyName2][=propertyValue2]...

  • host:port là tên host số cổng của máy tính lưu trữ cơ sở dữ liệu của bạn. Nếu không chỉ định thì các giá trị mặc định của host và port là 127.0.0.1 và 3306 tương ứng.
  • database là tên của cơ sở dữ liệu kết nối tới. Nếu không được chỉ định thì một kết nối được tạo ra nhưng không có cơ sở dữ liệu mặc định.
  • failover là tên của cơ sở dữ liệu dự phòng (MySQL Connector/J hỗ trợ chuyển đổi dự phòng).
  • propertyName=propertyValue đại diện cho một tùy chọn gồm các thuộc tính được phân tách bằng dấu (&). Những thuộc tính này cho phép ta chỉ thị cho MySQL Connector/J thực hiện các tác vụ khác nhau.
» Tiếp: Cách kết nối tới các RDBMS trong Java JDBC
« Trước: Tổng quan về cơ sở dữ liệu quan hệ
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!