Bai005 – Bài 05 – BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC Học xong bài này người học thực hiện được các – StuDocu

BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC

Học xong bài này người học thực hiện được các nội dung sau.

  • Trình bày được khái niệm về JDBC; Các thành phần JDBC; Phân loại JDBC; Cơ
    chế hoạt động JDBC,..
  • Thực hiện được việc tải và cài đặt JDBC driver cho project
  • Trình bày được các phương pháp kết nối CSDL với các hệ QT CSDL SQL Server,
    Ocracle, MySQL,…
  • Thực hiện được việc kết nối và truy xuất cơ sở dữ liệu
  • Thực hiện được việc xử lý kết xuất kết quả truy xuất CSDL.
  • Xây dựng được ứng dụng Quản lý CSDL

5. GIỚI THIỆU VỀ JDBC

5.1. JDBC là gì?

JDBC (Java DataBase Connectivity) là một thư viện chuẩn dùng để truy xuất các

cơ sở dữ liệu như MS Acess, SQL Server, Oracle, PostgreSQL,… trong các ứng dụng

Java bằng ngôn ngữ truy vấn SQL.

JDBC hỗ trợ các chức năng như tạo một kết nối đến một cơ sở dữ liệu, tạo câu lệnh

SQL (Structured Query Language), thực thi câu lệnh SQL, xem và thay đổi dữ liệu.

Hình 5. Trình điều khiển JDBC

5.1. Các thành phần JDBC – JDBC API

Các thành phần JDBC:

  • DriverManager: Lớp này quản lý một danh sách trình điều khiển cơ sở dữ liệu
    (database drivers). Lựa chọn trình điều khiển phù hợp từ yêu cầu của ứng dụng
    java sử dụng giao thức giao tiếp.

  • Connection: Đại diện cho một kết nối đến cơ sở dữ liệu

  • Statement: Đối tượng dùng để thực thi các câu lệnh SQL như câu lệnh thêm dữ liệu
    (insert), câu lệnh thay đổi dữ liệu (update), câu lệnh xoá dữ liệu (delete), câu lệnh
    xem dữ liệu (select), …

  • ResultSet: Đối tượng này sẽ chứa dữ liệu sau khi chúng ta thực thi câu lệnh xem dữ
    liệu. Sử dụng đối tượng này để duyệt qua tất cả dữ liệu được chứa trong ResultSet.

Hình 5. Các thành phần của JDBC

5.1. Phân loại JDBC Database Driver

Có 4 kiểu JDBC Database Driver:

  • Kiểu 1: JDBC-ODBC bridge driver
     Chuyển đổi các lời gọi JDBC thành ODBC, ODBC có thể truy xuất
    giao thức DBMS.
     Phương thức truy xuất dữ liệu đòi hỏi trình điều khiển ODBC được
    cài đặt trên máy tính client.

Hình 5. JDBC-ODBC bridge driver

  • Kiểu 2: Native protocol partly java driver
     Chuyển lời gọi JDBC thành các lời gọi giao thức DBMS đặc thù.
     Khi đó sự chuyển đỗi này đặt trên máy client, một số mã nhị phân phải được
    cài đặt trên máy tính client.

Hình 5. Native protocol all Java driver

Kết luận trình điều khiển nào nên được sử dụng (Which driver should be used)

  • Nếu truy cập vào cơ sở dữ liệu như MySQL, SQL Server, PostgreSQL, Oracle, … thì
    loại 4 nên được sử dụng.
  • Nếu ứng dụng Java truy cập nhiều loại CSDL cùng lúc thì loại 3 nên được sử dụng.
  • Loại 2 được sử dụng trong một số tình huống khi mà loại 3 hoặc loại 4 là không có
    sẵn.
  • Loại 1 thường được sử dụng với mục đích thử nghiệm.

5. CƠ CHẾ HỌAT ĐỘNG VỚI JDBC

Hình 5: Mô hình hoạt động của ứng dụng với JDBC

Các bước truy xuất cơ sở dữ liệu

  • Nạp trình điều khiển.
  • Thiết lập kết nối.
  • Tạo đối tượng Statement
  • Thực hiện thao tác dữ liệu
  • Xử lý kết quả trả về
  • Đóng kết nối

5.2. NẠP TRÌNH ĐIỀU KHIỂN.

Sử dụng phương thức tĩnh registerDriver của lớp DirverManager hoặc

forName() của lớp Class với tham số là tên trình điều khiển cơ sở dữ liệu.

try {
DriverManager(new
com.microsoft.sqlserver.jdbc());
} catch(ClassNotFoundException e) {
System.out(“Error loading driver: “ e);
}
Hoặc
try {
Class(“com.microsoft.sqlserver.jdbc”);
} catch(ClassNotFoundException e) {
System.out(“Error loading driver: “ e);
}
Một số trình điều khiển thường dùng là:

 Trình điều khiển của MySQL: Class(“org.gjf.mm.mysql”);
 Trình điều khiển của Oracle: Class(“oracle.jdbc.driver”);
 Trình điều khiển của Sybase: Class(“com.sybase.jdbc”);
 Trình điều khiển qua cầu nối ODBC:
Class(“sun.jdbc.odbc”);
 Trình điều khiển qua cầu nối SQL Server (Native):
Class(“com.microsoft.sqlserver.jdbc”);

5.2 Thiết lập kết nối.

  • Chỉ định chuỗi kết nối
    String host = “dbhost.yourcompany”;
    String dbName = “someName”;
    int port = 1234;
    String oracleURL = “jdbd:oracle:thin:@” + host + “:” + port + “:” + dbName;
    String sybaseURL = “jdbc:sybase:Tds:” + host + “:” + port + “:” +

 Ví dụ minh họa cách kết nối tới SQL Server:
try {
DriverManager(new
com.microsoft.sqlserver.jdbc());
String url = “jdbc:sqlserver://localhost:1433;database=QLBanSach;user=sa;
password= 1234567”
Connection connection = DriverManager(url);
} catch(ClassNotFoundException e) {
System.out(“Driver not found: “ e);
}catch(SQLException e){
System.out(“SQL Exception : “ + e) ;
}
5 .2 Tạo đối tượng Statement

Một đối tượng Statement được sử dụng để truyền câu truy vấn và câu lệnh

đến CSDL và nó được tạo từ đối tượng Connection đã khởi tạo.

Cách tạo đối tượng statement là gọi phương thức createStatement() của đối tượng

Connection: Statement statement = connection();

Theo mặc đinh, đối tượng statement được tạo ra từ phương thứccreateStatement() khi

truy vấn đến cơ sở dữ liệu cho kết quả là forward-only và read-only.

Tạo statement cho phép cập nhật:
createStatement(int resultSetType,int resultSetConcurrency) throws
SQLException
Cho phép tạo đối tượng Statement mà sẽ phát sinh đối tượng ResultSet với kiểu và

thao tác xác định.

Các tham số:
– resultSetType: kiểu của tập kết quả, có thể là
 ResultSet_FORWARD_ONLY

 ResultSet_SCROLL_INSENSITIVE
 ResultSet_SCROLL_SENSITIVE

  • resultSetConcurrency: kiểu thao tác, có thể là
     ResultSet_READ_ONLY
     ResultSet_UPDATABLE

5 .2 Thực hiện thao tác dữ liệu

Xây dựng câu truy vấn (query):
String sql = “SELECT col1, col2,col3 FROM table1, table2”;
String sql = “Update table1 set col1 = col1 *10 / 100”;
Để thực thi câu lệnh SQL ta sử dụng một trong hai phương thức sau của đối tượng

Statement là executeQuery() và executeUpdate().

  • Phương thức executeQuery: thực hiện câu vấn tin dạng SELECT và nhận kết
    quả trả về là một đối tượng ResultSet (tập các bản ghi dữ liệu truy vấn được).

  • Phương thức executeUpdate: thưc thi câu vấn tin dạng CREATE, UPDATE,
    INSERT, DELETE.
    Sau đây là một số ví dụ về cập nhật dữ liệu:

  • Thêm một bản ghi mới vào cơ sở dữ liệu

  • Cập nhật các thay đỗi vào cơ sở dữ liệu

  • Xóa các bản ghi thỏa mãn điều kiện

5 .2 Xử lý kết quả trả về (ResultSet)

Đối với câu vấn tin dạng SELECT, nếu truy vấn thành công thì kết quả trả về là tập

các bản ghi dữ liệu được lưu trong đối tượng ResultSet và ta có thể hiển thị hoặc xử lý trên

kết quả này. Cách duyệt qua các bản ghi dữ liệu như sau:

Đối tượng ResultSet

  • Theo mặc định phương thức createStatement() tạo ra đối tượng ResultSet là
    forward-only & read-only. Điều này có nghĩa ta chỉ có thể di chuyển con trỏ thông
    qua nó từ bản ghi đầu tiên đến bản ghi cuối cùng mà không thể cập nhật được.
  • Khi ResultSet được tạo, con trỏ được định vị trước bản ghi đầu tiên. Sau đó
    ta có thể sử dụng các phương thức của ResultSet để di chuyển con trỏ.
  • Các phương thức của ResultSet ném ra ngoại lệ SQLException.
  • Ví dụ tạo ResultSet gồm 1 dòng và 1 cột:
    Statement stmt = connection();
    ResultSet rsUserID = stmt(“SELECT UserID
    FROM User WHERE Email=“jerry@yahoo””);
  • Ví dụ ResultSet gồm nhiều dòng và nhiều cột:
    Statement stmt = connection();
    ResultSet rsProducts = stmt(“SELECT * FROM product”);
  • Một số phương thức của ResultSet forward-only, read-only:
     Next(): Di chuyển tới dòng kế tiếp trong ResultSet.
     Last(): Di chuyển đến dòng cuối cùng trong tập kết quả
     Close(): Đóng kết nối giữa JDBC Resultset va Cơ sở dữ liệu

 getRow(): Trả về dòng hiện tại (số nguyên)

  • Cách nhận dữ liệu từ ResultSet:
     Các phương thức dạng getAAAA() có thể sử dụng để lấy về các kiểu
    dữ liệu cơ bản, như int, long, double, …
    int n = rsProduct(“Soluong”),
    double price = rsProduct(“Price”);

     Các phương thức dạng getAAAA() cũng có thể được sử dụng để lấy
    về kiểu chuỗi, ngày tháng, thời gian, …
    String username = rsUser(1);
    Date = rsProduct(“MakeDate”);

5 .2 Đóng kết nối

Để ngắt kết nối ta sử dụng phương thức close của đối tượng connection:
connection()

5 CHƯƠNG TRÌNH MẪU

Để thực hiện ứng dụng minh họa, cần kiểm tra tài khoản đăng nhập SQL Server, cần

điều chỉnh thiết lập mật khẩu cho tài khoản sa. Tiến hành kiểm tra và điều chỉnh port 1433

cho SQL Server.

5.3. Thiết lập tài khoản đăng nhập SQLServer 20XX

Khi chưa thiết lập tài khoản sa khi cài đặt sql server, hoặc quên mất mật khẩu của tài

khoản sa, hoặc muốn đổi mật khẩu sa.

Bước 1: Thiết lập SQL Server cho phép đăng nhập với tài khoản của SQL Server

  • Khởi động SQL Server và đăng nhập với chế độ Windows Authenticate

  • Tại cửa sổ Opject Explorer: Chuột phải SQL Server -> Chọn Properties

  • Chọn SQL Server and Windows Authencation mode

  • Khởi động lại SQL Server

Bước 2: Kích hoạt và đặt mật khẩu cho tài khoản sa

  • Tại mục Login của cửa sổ Object Explorer của SQL Server
  • Tại mục Logins Click phải tài khoản sa -> Chọn Properties
  • Đặt mật khẩu  OK
  • Tại mục Status  Login Kích hoạt tài khoản sa bằng cách chọn Enable (mặc định tài
    khoản này là disable)

5.3. Tải và cài đặt JDBC Driver cho project

  • Tải MS SQL Server JDBC Driver và giải nén:
    microsoft/en-US/download/details.aspx?id=

Hình 5 tải và giải nén JDBC Driver SQL Server

  • Cài đặt Microsoft SQL Server JDBC Driver cho NetBeans
     Khởi động NetBeans
     Tạo Project mới: KetnoiCSDLDemo
     Chọn thẻ tool -> library -> New Library
    o Ở Textfield Library Name: chọn tên thư viện mà bạn muốn đặt
    o Còn ở Library Type thì cứ để mặc định  Sau đó OK.
     Tiếp tục Chọn Nút Add JAR/Folder
    o Chỉ đường dẫn đến file JAR mới vừa down về.

Hình 5 Cài đặt JDBC Driver cho project

Kết quả đã cài đặt:

Hình 5 Kết quả cài đặt JDBC Driver cho project

5.3. Tạo ứng dụng kết nối CSDL SQL Server với Java trên Netbeans

  • Minh họa 1: Trong Project KetnoiCSDLDemo thực hiện code cho chương trình
    import java.sql;
    import java.sql;
    import java.sql;
    import java.sql;
    import java.sql;
    public class KetnoiCSDLDemo {
    public static void main(String[] args) throws SQLException {

}
Thực thi chương trình:

Hình 5 Kết quả minh họa

  • Minh họa 2: Hiện thị dữ liệu lên JTable
    Tạo thêm vào project java class QLSanpham

String rows[] = new String[4];
rows[0] = result(1); // lấy dữ liệu tại cột số 1 (ứng với mã sp)
rows[1] = result(2);
rows[2] = result(3);
rows[3] = result(4);
tableModel(rows);
// đưa dòng dữ liệu vào tableModel để hiện thị lên jtable
//mỗi lần có sự thay đổi dữ liệu ở tableModel thì Jtable
//sẽ tự động update lại trên frame
}
} catch (SQLException e) {
e();
}
}
public void initComponent(){
this(400, 200);
// Đưa jtable vào trong thanh cuộn (khi dữ liệu quá nhiều dòng
// sẽ có thanh cuộn ngang và doc để xem dữ liệu)
JScrollPane scroll = JTable(jtable);
this(scroll); // Đưa thanh cuộn vào Frame (hiện thanh cuộn trên frame)
this(DISPOSE_ON_CLOSE);
this(true);
}
public void connectSQL() throws SQLException{
try {
String userName =”sa”;
String password = “123456”;
String url = “jdbc:sqlserver://localhost:1433;databaseName=QLSanpham;”;
Class(“com.microsoft.sqlserver.jdbc”);
connect = java.sql.DriverManager(url,userName,password);
System.out (“Da ket noi CSDL”);
}
catch (ClassNotFoundException e) {
e();
}
}
public ResultSet view(){
ResultSet result = null;
String sql = “SELECT * FROM Sanpham”;
try {
Statement statement = (Statement) connect();
return statement(sql);
} catch (SQLException e) {

e();
}
return result;
}
public static void main(String[] args) throws SQLException {
new QLSanpham();
}
}

Hình 5 Kết quả minh họa