Java: Thiết lập kết nối
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ượngDataSource
đượ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:
-
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. -
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ênmysql
. 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ểujava.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ệnjava.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ủahost
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.
Giải phóng thời gian, khai phóng năng lực