Tổng hợp các bài học về lập trình Java JDBC, hướng dẫn kết nối cơ sở dữ liệu JDBC và thao tác trong JDBC Tổng hợp các bài học về lập trình Java JDBC, hướng dẫn kết nối cơ sở dữ liệu JDBC và thao tác trong JDBC
Trang 1dữ liệu như MySQL, SQL Server, Oracle, PostgreSQL, …
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
2 Kiến trúc JDBC (JDBC Architecture)
Trang 22
3 Các thành phần JDBC thông dụng
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
SQLException: Lớp này xử lý tất cả những ngoại lệ phát sinh trong quá
trình ứng dụng java thao tác với cơ sở dữ liệu
4 Phân loại (JDBC Drivers Types)
Loại 1 (Type 1): Sử dụng cầu nối ODBC – Open Database Connectivity
(JDBC – ODBC Bridge Driver) Sử dụng ODBC, yêu cầu bạn phải cấu hình trên hệ thống một DSN (Data Source Name) đại diện cho cơ sở dữ liệu muốn
sử dụng
Trang 33
Loại 2: JDBC-Native API
Trang 44
Loại 3: JDBC kết nối thông qua các ứng dụng mạng trung gian
Trang 5Loạ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 cho cơ sở dữ liệu của bạn
Loại 1 thường được sử dụng với mục đích thử nghiệm
5 Giới thiệu một số câu lệnh SQL thông dụng
Tạo cơ sở dữ liệu
CREATE DATABASE DATABASE_NAME;
Xoá cơ sở dữ liệu
DROP DATABASE DATABASE_NAME;
Tạo bảng
CREATE TABLE table_name
(
column_name column_data_type,
Trang 6DELETE FROM table_name WHERE conditions;
Thay đổi dữ liệu
Trang 7Hướng dẫn kiểm tra máy tính của bạn đã cài đăt JDK chưa? Sử dụng CMD (Command) và gõ lệnh java -version sau đó nhấn Enter để xem kết quả
3 Cài đặt hệ quản trị cơ sở dữ liệu
Ứng dụng Java có thể làm việc với nhiều hệ quản trị cơ sở dữ liệu khác nhau như MySQL, PostgreSQL, SQL Server, Oracle, …Chúng ta lựa chọn hệ quản trị nào còn tuỳ thuộc vào yêu cầu thực tế của dự án Trong phạm vi môn học này, chúng ta sẽ cài đặt và sử dụng hệ quản trị SQL Server của Microsoft
4 Tạo cơ sở dữ liệu
Chúng ta sẽ tạo một cơ sở dữ liệu tên EMPDB sử dụng câu lệnh sau
CREATE DATABASE EMPDB
Cách tạo cơ sở dữ liệu với SQL Server
Nhập câu lệnh và chọn Execute (Hoặc nhấn F5)
Trang 8create table Employees (
id int not null primary key
,first nvarchar (255)
Trang 9 Cài đặt Microsoft SQL Server
Tạo cơ sở dữ liệu
Tạo bảng
Trang 1010
Kết nối SQL Server với java (Bài 3)
1 Kết nối sql server với java (Connect to Microsoft SQL Server via JDBC) sẽ
hướng dẫn các bạn làm thế nào để có được trình điều khiển JDBC (JDBC Driver) và viết mã (code) cho việc kết nối đến cơ sở dữ liệu được cài đặt trên Microsoft SQL Server từ ứng dụng Java Nội dung bài học bao gồm tải JDBC Driver, chuỗi kết nối cho Microsoft SQL Server (sql server jdbc connection string), thiết lập kết nối (establish connection) và chương trình mẫu
2 Download Microsoft JDBC driver
Tải JDBC Driver và thêm sqljdbc42.jar vào Java project sử dụng NetBeans theo các bước sau
Chuột phải Libraries -> Chọn Add JAR/Folder…
Chỉ định thư mục chứa JDBC Driver và chọn tập tin sqljdbc42.jar
-> chọn Open
Trang 1111
Trang 1212
3 SQL Server JDBC connection string
Là chuỗi được sử dụng để kết nối đến SQL Server Mỗi một hệ quản trị cơ
sở dữ liệu sẽ có một chuỗi kết nối khác nhau Sau đây là chuỗi kết nối JDBC dành cho Microsoft SQL Server
Trang 1313
property=value chỉ định tên cơ sở dữ liệu, tên và mật khẩu đăng nhập vào SQL Server
databaseName=EMPDB; user=sa; password=sa
4 Thiết lập kết nối (establish connection)
Để tạo một kết nối, gọi phương thức getConnection() của lớp DriverManager Sau đây là đoạn code được sử dụng để kết nối đến localhost sử dụng user là sa, mật khẩu là sa và kết nối vào cơ sở dữ liệu tên EMPDB
String dbURL =
"jdbc:sqlserver://localhost;databaseName=EMPDB;user=sa;password=sa"; Connection conn = DriverManager.getConnection(dbURL);
if (conn != null) {
System.out.println("Connected");
}
Để đoạn code trên được thực thi thành công, chúng ta phải thực hiện 2 việc
Việc thứ nhất: Thiết lập SQL Server cho phép đăng nhập sử dụng tài khoản
của SQL Server
Chuột phải SQL Server -> Chọn Properties
Trang 1414
Chọn SQL Server and Windows Authencation mode
Trang 1515
Trang 1616
Khởi động lại SQL Server
Việc thứ hai: Kích hoạt và đặt mật khẩu cho tài khoản sa
Trang 1717
Chuột phải sa -> Chọn Properties
Trang 1818
Đặt mật khẩu
Trang 20public class ConnectionTest {
public static void main(String[] args) {
try {
String dbURL =
"jdbc:sqlserver://localhost;databaseName=EMPDB;user=sa;password=sa"; Connection conn = DriverManager.getConnection(dbURL);
System.out.println("Driver version: " + dm.getDriverVersion());
System.out.println("Product name: " + dm.getDatabaseProductName()); System.out.println("Product version: " +
dm.getDatabaseProductVersion());
}
} catch (SQLException ex) {
System.err.println("Cannot connect database, " + ex);
Trang 2121
Tổng kết bài kết nối sql server với Java
Download Microsoft JDBC driver
SQL Server JDBC connection string
Establish connection
Example program
Trang 2222
JDBC Statement trong java (Bài 4)
1 JDBC Statement trong java Khi một kết nối được thiết lập, chúng ta có
thể tương tác với cơ sở dữ liệu JDBC Statement, PreparedStatement
và CallableStatement định nghĩa những phương thức và thuộc tính, cho phép
chúng ta thực thi câu lệnh SQL và nhận dữ liệu từ cơ sở dữ liệu của bạn Bảng sau đây mô tả tóm tắt về Statement, PreparedStatement
2 Đối tượng Statement (Statement Objects)
Tạo đối tượng Statement
Trang 2323
finally {
}
Thực thi câu lệnh SQL (Execute an SQL statement)
boolean execute (String SQL): Trả về giá trị true nếu thực thi thành công câu lệnh SQL; ngược lại sẽ trả về giá trị false Sử dụng phương thức này
để thực thi các câu lệnh SQL DDL như tạo cơ sở dữ liệu, tạo bảng, …
int executeUpdate (String SQL): Trả về số dòng bị tác động khi thực thi
các câu lệnh như INSERT, UPDATE hoặc DELETE
ResultSet executeQuery (String SQL): Trả về một đối tượng ResultSet
khi bạn thực thi câu lệnh SELECT
Đóng đối tượng Statement (Closing Statement Object)
package jdbc;
Trang 24public class JDBCStatementExample {
// SQL Server JDBC connection string
static final String DB_URL =
"jdbc:sqlserver://localhost;databaseName=EMPDB;user=sa;password=sa";
public static void main(String[] args) {
Connection conn = null;
Trang 2525
String sql = "INSERT INTO Employees VALUES (100, 18, N'gia sư', N'tin học');";
int rows = stmt.executeUpdate(sql);
System.out.println("Rows impacted : " + rows);
// Let us select all the records and display them
sql = "SELECT id, first, last, age FROM Employees";
int age = rs.getInt("age");
String first = rs.getString("first");
String last = rs.getString("last");
//Display values
System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", First: " + first);
System.out.println(", Last: " + last);
Trang 2626
} catch (SQLException se) {
//Handle errors for JDBC
3 Đối tượng PreparedStatement (PreparedStatement Objects)
Tạo đối tượng PreparedStatement
PreparedStatement pstmt = null;
try {
String SQL = "Update Employees SET age = ? WHERE id = ?";
pstmt = conn.prepareStatement(SQL);
Trang 27phương thức setXXX() với XXX đại diện cho kiểu dữ liệu Và mỗi tham số
được đánh dấu bằng số thứ tự; tha số đầu tiên có vị trí là 1, tham số kế tiếp
Trang 2828
// SQL Server JDBC connection string
static final String DB_URL =
"jdbc:sqlserver://localhost;databaseName=EMPDB;user=sa;password=sa";
public static void main(String[] args) {
Connection conn = null;
//Bind values into the parameters
stmt.setInt(1, 35); // This would set age
stmt.setInt(2, 100); // This would set ID
// Let us update age of the record with ID = 100;
int rows = stmt.executeUpdate();
System.out.println("Rows impacted : " + rows);
// Let us select all the records and display them
sql = "SELECT id, first, last, age FROM Employees";
stmt = conn.prepareStatement(sql);
Trang 29int age = rs.getInt("age");
String first = rs.getString("first");
String last = rs.getString("last");
//Display values
System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", First: " + first);
System.out.println(", Last: " + last);
} catch (SQLException se) {
//Handle errors for JDBC
Trang 304 Đối tượng CallableStatement (CallableStatement Objects)
Tạo đối tượng CallableStatement (Creating CallableStatement Object)
Trang 3131
}
Đóng đối tượng CallableStatement (Closing CallableStatement Object)
cstmt.close();
JDBC Statement trong java – Ví dụ
Tạo thủ tục getEmpName trong EMPDB sử dụng Microsoft SQL Server Management Studio
GO
USE EMPDB
GO
CREATE PROCEDURE getEmpName
@EMP_ID INT, @EMP_FIRST NVARCHAR(255) OUTPUT
Trang 3232
*/
public class JDBCCallableStatementExample {
// SQL Server JDBC connection string
static final String DB_URL =
"jdbc:sqlserver://localhost;databaseName=EMPDB;user=sa;password=sa";
public static void main(String[] args) {
Connection conn = null;
Trang 3333
System.out.println("Executing stored procedure ");
stmt.execute();
//Retrieve employee name with getXXX method
String empName = stmt.getString(2);
System.out.println("Emp name with ID (" + empID + ") is " + empName); stmt.close();
conn.close();
} catch (SQLException se) {
//Handle errors for JDBC
Trang 34Bước 1: Thiết lập kết nối đến máy chủ cơ sở dữ liệu
Bước 2: Tạo đối tượng thực thi câu lệnh SQL (Statement, PrepareStatement
hoặc CallableStatement)
Bước 3: Viết câu lệnh SQL, thực thi câu lệnh SQL và xử lý kết quả (nếu có) Bước 4: Đóng kết nối
Tổng kết bài JDBC Statement trong java
Thực thi câu lệnh SQL tĩnh với Statement
Thực thi câu lệnh SQL có tham số với PreparedStatement
Thực thi thủ tục với CallableStatement
Trang 3535
Lập trình Java Swing và JDBC (Bài 5)
Sản phẩm lập trình java swing và jdbc là những ứng dụng có sự kiết hợp
giữa thư viện Swing và JDBC cho phép người dùng thao tác với ứng dụng thông qua giao diện đồ hoạ (GUI) và quản lý dữ liệu thông qua JDBC VÍ dụ những chương trình quản lý bán hàng, quản lý siêu thị, quản lý đào tạo, …thì phần giao diện được thiết kế bằng cách sử dụng Swing và phần cơ
sở dữ liệu sẽ sử dụng JDBC và một hệ quản trị cơ sở dữ liệu như MySQL, SQL Server hay Oracle, …
CREATE TABLE Books (
ID INT IDENTITY PRIMARY KEY
,title NVARCHAR(50)
,price FLOAT
)
GO
INSERT INTO Books (title, price) VALUES (N'Lập trình C',100)
INSERT INTO Books (title, price) VALUES (N'Lập trình Java',200)
INSERT INTO Books (title, price) VALUES (N'Lập trình C#',150)
GO
Lập trình java swing và jdbc – Chương trình 1: Tìm kiếm và xoá dữ liệu
Trang 3636
Cho phép người dùng xem và xoá dữ liệu của bảng Books Ngoài ra chương trình cũng cho phép người dùng tìm kiếm một sách theo tiêu đề (title)
Mô tả yêu cầu
Đối với nút “Search” nếu vùng filter không nhập, chương trình sẽ hiển thị
tất cả dữ liệu của bảng Books Ngược lại chương trình chỉ hiển thị đúng với
thông tin mà người dùng đã nhập hoặc ứng dụng sẽ thông báo “The book
is not available!” trong trường hợp không tìm thấy
Trang 3737
Khi người dùng chọn một dòng trên table, nút “Delete” sẽ ở trạng thái sử dụng và chương trình sẽ hiển thị thông báo xác nhận “Do you want to
delete?” khi người dùng chọn nút “Delete” Nếu chọn “Yes“, chương trình
sẽ xoá thông tin sách được chọn khỏi cơ sở dữ liệu
Nút “Exit” sẽ đóng chương trình
Viết xử lý cho nút “Search”
Bước 1: Khai báo tiêu đề và model cho Table
private String header[] = {"Id", "Title", "Price"};
private DefaultTableModel tblModel = new DefaultTableModel(header, 0);
Bước 2: Truy xuất dữ liệu của bảng Books
Connection conn = null;
Trang 3838
// Câu lệnh xem dữ liệu
String sql = "select * from Books ";
// Nếu tìm kiếm theo title
Trang 4040
Trước khi xoá dữ liệu, người dùng phải chọn một dòng trên table và chương trình sẽ lấy giá trị của cột đầu tiên của dòng được chọn để làm điều kiện xoá (cột id)
int ret = JOptionPane.showConfirmDialog(this, "Do you want to delete?",
=Library", "sa", "sa");
ps = c.prepareStatement("Delete From Books where id = ?");
ps.setInt(1, id ); //giá trị của cột đầu tiên tại dòng được chọn trong table ret = ps.executeUpdate();
Trang 41Giao diện chương trình
Khi người dùng chọn id từ combobox, chương trình sẽ hiển thị thông tin của title và price tương ứng vào các textfield Dữ liệu sẽ được cập nhật khi người
dùng chọn nút “Save“
Viết xử lý hiển thị dữ liệu cho combobox
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
Trang 42rs = st.executeQuery("select id from books ");
Vector data = new Vector();
Trang 4343
ex.printStackTrace();
}
}
Đăng ký và xử lý sự kiện cho combobox
Đăng ký sự kiện: chuột phải combobox -> chọn Events -> chọn Action
=Library", "sa", "sa");
id = Integer.parseInt((String) cmbCondition getSelectedItem());
String sql = "Select * from books where id = ?";
Trang 44Viết xử lý cho nút “Save”
int ret = JOptionPane.showConfirmDialog(this, "Do you want to
update?", "Confirm", JOptionPane.YES_NO_OPTION);
Trang 45ps.setString(1, txtTitle getText());
ps.setFloat(2, Float.parseFloat( txtPrice getText()));
ps.setInt(3, id ); //id được chọn từ combobox
Trang 46Lập trình java swing và jdbc – Chương trình 3: Thêm dữ liệu
Giao diện chương trình
Trang 4747
return;
}
// Hiển thị hộp thoại xác nhận có muốn lưu hay không?
int ret = JOptionPane.showConfirmDialog(this, "Do you want to save?",
ps.setString(1, txtTitle getText());
ps.setFloat(2, Float.parseFloat( txtPrice getText()));
// Thực thi câu lệnh insert
ret = ps.executeUpdate();
Trang 48Thiết kế giao diện với Java Swing
Lập trình cơ sở dữ liêu với JDBC
3 Bài tập thực hành
Bài thực hành số 1: Viết chương trình cho phép quản lý thông tin lớp học Giao diện
Trang 4949
Màn hình 1
Viết xử lý
Khi người dùng chọn nút lệnh “Display”, hiển thị thông tin từ bảng
ClassTbl vào JTable Nếu người dùng nhập tên lớp tại “Class name”,
chương trình sẽ hiển thị thông tin về lớp đã được nhâp
Chương trình cũng cho phép cập nhật lại thông tin lớp bằng cách chọn một
dòng tại JTable và nhập thông tin thay đổi tại “Class Name” , sau đó chọn nút lệnh “Update” để hoàn tất
Để xóa thông tin, người dùng sẽ chọn một dòng muốn xóa tại JTable và
chọn nút lệnh “Delete”
Khi người dùng chọn nút lệnh “Insert”, chương trình sẽ hiển thị màn hình
thêm thông tin lớp học
Màn hình 2
Bài thực hành số 2: Tại màn hình thêm thông tin lớp hớp học (Màn hình 2)