Top Banner
ThS. Dương Thành Phết http://www.thayphet.net Trang 126 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.1. GIỚI THIỆU VỀ JDBC 5.1.1. JDBC là gì? JDBC (Java DataBase Connectivity) 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.1. Trình điều khiển JDBC 5.1.2. 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
18

BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

Aug 29, 2019

Download

Documents

truongcong
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

ThS. Dương Thành Phết http://www.thayphet.net Trang 126

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.1. GIỚI THIỆU VỀ JDBC

5.1.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.1. Trình điều khiển JDBC

5.1.2. 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

Page 2: BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

ThS. Dương Thành Phết http://www.thayphet.net Trang 127

- 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.2. Các thành phần của JDBC

5.1.3. 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.3. 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.

Page 3: BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

ThS. Dương Thành Phết http://www.thayphet.net Trang 128

Hình 5.4. Native protocol partly java driver

- Kiểu 3: Net protocol all Java driver

Chuyển đổi các lời gọi JDBC thành giao thức mạng độc lập với bất kỳ giao

thức DBMS đặc thù. Sau đó, một phần mềm trung gian (middleware) chạy

trên máy server chuyển đỗi giao thức mạng thành giao thức DBMS đặc thù.

Sự chuyển này đặt ở phía server mà không đòi hỏi cài đặt trên máy tính

client.

Hình 5.5. Net protocol all Java driver

- Kiểu 4: Native protocol all 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 phía server, mà không đòi hỏi cài đặt

trên máy tính client

Page 4: BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

ThS. Dương Thành Phết http://www.thayphet.net Trang 129

Hình 5.6. 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.2. CƠ CHẾ HỌAT ĐỘNG VỚI JDBC

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

Page 5: BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

ThS. Dương Thành Phết http://www.thayphet.net Trang 130

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.1. 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.registerDriver(new

com.microsoft.sqlserver.jdbc.SQLServerDriver());

} catch(ClassNotFoundException e) {

System.out.println(“Error loading driver: “ e);

}

Hoặc

try {

Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);

} catch(ClassNotFoundException e) {

System.out.println(“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.forName(“org.gjf.mm.mysql.Driver”);

Trình điều khiển của Oracle: Class.forName(“oracle.jdbc.driver.OracleDriver”);

Trình điều khiển của Sybase: Class.forName(“com.sybase.jdbc.SybDriver”);

Trình điều khiển qua cầu nối ODBC:

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

Trình điều khiển qua cầu nối SQL Server (Native):

Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);

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

- Chỉ định chuỗi kết nối

String host = "dbhost.yourcompany.com";

String dbName = "someName";

int port = 1234;

String oracleURL = "jdbd:oracle:thin:@" + host + ":" + port + ":" + dbName;

String sybaseURL = "jdbc:sybase:Tds:" + host + ":" + port + ":" +

Page 6: BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

ThS. Dương Thành Phết http://www.thayphet.net Trang 131

"?SERVICEid="+ dbName;

- Thiết lập kết nối: Để thiết lập kết nối ta gọi phương thức tĩnh getConnection()

của lớp DriverManager, khi đó trả về một thể hiện của lớp Connection, theo dạng

sau:

String user = “sa”

String password = “secret”

Connection con = DriverManager.getConnection(dbUrl, username, password);

Trong đó:

- dbUrl: chuỗi kết nối đến cơ sở dữ liệu.

- username: tên người dùng đăng nhập

- password: mật khẩu đăng nhập.

Để lấy các thông tin về cơ sở dữ liệu gọi phương thức getMetaData() của

Connection trả về đối tượng lớp DatabaseMetaData.

Ví dụ sau minh họa kết nối đến MySQL

Ví dụ sau minh họa cách kết nối tới Oracle

Page 7: BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

ThS. Dương Thành Phết http://www.thayphet.net Trang 132

Ví dụ minh họa cách kết nối tới SQL Server:

try {

DriverManager.registerDriver(new

com.microsoft.sqlserver.jdbc.SQLServerDriver());

String url = “jdbc:sqlserver://localhost:1433;database=QLBanSach;user=sa;

password= 1234567”

Connection connection = DriverManager.getConnection(url);

} catch(ClassNotFoundException e) {

System.out.println(“Driver not found: “ e.getMessage);

}catch(SQLException e){

System.out.println(“SQL Exception : “ + e.getMessage) ;

}

5.2.3 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.createStatement();

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.TYPE_FORWARD_ONLY

Page 8: BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

ThS. Dương Thành Phết http://www.thayphet.net Trang 133

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

- resultSetConcurrency: kiểu thao tác, có thể là

ResultSet.CONCUR_READ_ONLY

ResultSet.CONCUR_UPDATABLE

5.2.4 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

Page 9: BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

ThS. Dương Thành Phết http://www.thayphet.net Trang 134

Ngoài ra ta cũng có thể sử dụng đối tượng PreparedStatement để viết các câu lệnh truy

vấn có tham số và câu lệnh được biên dịch trước

Ví dụ:

Khi sử dụng PreparedStatement, database server phải kiểm tra cú pháp và

chuẩn bị một kế hoạch xử lý một lần cho mỗi câu lệnh SQL.Để xác định một tham

số cho PreparedStatement, gỏ dấu chấm hỏi (?) trong câu lệnh SQL. Để cung cấp

các giá trị cho các tham số trong PreparedStatement, sử dụng các phương thức dạng

setAAAA().

Để xử lý câu SELECT, sử dụng phương thức executeQuery(). Để xử lý câu INSERT,

UPDATE, hoặc DELETE, sử dụng phương thức executeUpdate().

Ví dụ sau sử dụng PreparedStatement để sửa đổi dữ liệu:

Ví dụ sau sử dụng PreparedStatement thêm mới một bản ghi:

Ví dụ sau sử dụng PreparedStatement xóa các bản ghi thõa mãn điều kiện:

Page 10: BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

ThS. Dương Thành Phết http://www.thayphet.net Trang 135

5.2.5 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.createStatement();

ResultSet rsUserID = stmt.executeQuery(“SELECT UserID

FROM User WHERE Email=“[email protected]””);

- Ví dụ ResultSet gồm nhiều dòng và nhiều cột:

Statement stmt = connection.createStatement();

ResultSet rsProducts = stmt.executeQuery(“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

Page 11: BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

ThS. Dương Thành Phết http://www.thayphet.net Trang 136

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.getInt(“Soluong”),

double price = rsProduct.getDouble(“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.getString(1);

Date = rsProduct.getDate(“MakeDate”);

5.2.6 Đó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.close()

5.3 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.1. 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)

Page 12: BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

ThS. Dương Thành Phết http://www.thayphet.net Trang 137

- Tiếp theo phải restart lại service, th ấy những thay đổi này mới được thực thi. Để restart

service: Dùng tổ hợp phím Windows +R để xuất hiện hộp thoại Run, nhập lệnh

services.msc, tìm chọn mục SQL Server (SQL Express…)

- Service đang hoạt động. Ta tiến hành Stop và rồi ta Start cho khởi động lại. Ok xong

- Đã thấy chữ Started Service đang hoạt động

Tiến hành đăng nhập SQLServer với chế độ SQL Server Authenticate với tài khoản sa.

và thực hiện việc tạo CSDL với SQLServer.

5.3.2. Tạo CSDL cho ứng dụng:

Đăng nhập SQL Server với tài khoản sa, tạo CSDL và nhập liệu mẫu như sau:

--Tạo CSDL: QLSanpham

Create DataBase QLSanpham

use QLSanpham

---Tao Table LoaiSP

Create Table LoaiSP

(

Maloai char(2) primary key,

Tenloai nvarchar(20)

)

Insert into LoaiSP values('BK',N'Bánh kẹo')

Insert into LoaiSP values('GK',N'Giải khát')

Insert into LoaiSP values('MP',N'Mỹ phẩm')

----Tạo tabl Sanpham

Create Table Sanpham

(

MaSP char(4) primary key,

TenSP nvarchar(20),

Dongia bigint,

Maloai char(2) foreign key references LoaiSP(Maloai)

)

Insert into Sanpham values('SP01',N'Bánh mì',10000,'BK')

Insert into Sanpham values('SP02',N'Bánh bao',15000,'BK')

Insert into Sanpham values('SP03',N'Coca cola',12000,'GK')

Insert into Sanpham values('SP04',N'Pepsi',11000,'GK')

Insert into Sanpham values('SP05',N'Kem chống nắng',85000,'MP')

Page 13: BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

ThS. Dương Thành Phết http://www.thayphet.net Trang 138

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

- Tải MS SQL Server JDBC Driver và giải nén:

https://www.microsoft.com/en-US/download/details.aspx?id=11774

Hình 5.8 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ề.

Page 14: BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

ThS. Dương Thành Phết http://www.thayphet.net Trang 139

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

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

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

5.3.4. 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.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class KetnoiCSDLDemo {

public static void main(String[] args) throws SQLException {

}

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

Hình 5.10 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

Page 15: BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

ThS. Dương Thành Phết http://www.thayphet.net Trang 140

Hình 5.11 Thêm mới 1 Java Class

import java.sql.Statement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTable;

import javax.swing.table.DefaultTableModel;

public class QLSanpham extends JFrame {

private Connection connect = null;

private JTable jtable = new JTable();

private DefaultTableModel tableModel = new DefaultTableModel();

public QLSanpham() throws SQLException{

String []colsName = {"Mã SP", "Tên SP","Đơn giá", "Loai Sp"};

tableModel.setColumnIdentifiers(colsName); // đặt tiêu đề cột cho tableModel

jtable.setModel(tableModel); // kết nối jtable với tableModel

initComponent(); // Khởi tạo các components trên JFrame

connectSQL(); // kết nối cơ sở dữ liệu

updateData(view());

// gọi hàm view để truy suất dữ liệu sau đó truyền cho hàm updateData

//để đưa dữ liệu vào tableModel và hiện lên Jtable trong Frame

}

public void updateData(ResultSet result){

try {

while(result.next()){ // nếu còn đọc tiếp được một dòng dữ liệu

Page 16: BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

ThS. Dương Thành Phết http://www.thayphet.net Trang 141

String rows[] = new String[4];

rows[0] = result.getString(1); // lấy dữ liệu tại cột số 1 (ứng với mã sp)

rows[1] = result.getString(2);

rows[2] = result.getString(3);

rows[3] = result.getString(4);

tableModel.addRow(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.printStackTrace();

}

}

public void initComponent(){

this.setSize(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.createScrollPaneForTable(jtable);

this.add(scroll); // Đưa thanh cuộn vào Frame (hiện thanh cuộn trên frame)

this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

this.setVisible(true);

}

public void connectSQL() throws SQLException{

try {

String userName ="sa";

String password = "123456";

String url = "jdbc:sqlserver://localhost:1433;databaseName=QLSanpham;";

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

connect = java.sql.DriverManager.getConnection(url,userName,password);

System.out.println ("Da ket noi CSDL");

}

catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

public ResultSet view(){

ResultSet result = null;

String sql = "SELECT * FROM Sanpham";

try {

Statement statement = (Statement) connect.createStatement();

return statement.executeQuery(sql);

} catch (SQLException e) {

Page 17: BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

ThS. Dương Thành Phết http://www.thayphet.net Trang 142

e.printStackTrace();

}

return result;

}

public static void main(String[] args) throws SQLException {

new QLSanpham();

}

}

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

Page 18: BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC - hienlth.info · Để 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

ThS. Dương Thành Phết http://www.thayphet.net Trang 143

TÓM TẮT

Bài học này trình bày cách thức truy xuất và thao tác cơ sở dữ liệu sử dụng

JDBC với các bước như sau:

- 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 vấn tin và xử lý kết quả trả về

- Thực hiện các lệnh them, xóa, sửa dữ liệu

- Đóng kết nối

----------Hết--------