Database: ebookshop Table: books +-------+----------------------------+---------------+---------+-------+ | id | title | author | price | qty | | (INT) | (VARCHAR(50)) | (VARCHAR(50)) | (FLOAT) | (INT) | +-------+----------------------------+---------------+---------+-------+ | 1001 | Java for dummies | Dang Kim Thi | 11.11 | 11 | | 1002 | More Java for dummies | CodeLean VN | 22.22 | 22 | | 1003 | More Java for more dummies | Mohammad Ali | 33.33 | 33 | | 1004 | A Cup of Java | Kumar | 44.44 | 44 | | 1005 | A Teaspoon of Java | Kevin Jones | 55.55 | 55 | +-------+----------------------------+---------------+---------+-------+
Start MySQL Server: Khởi động máy chủ MySQL và xác minh số cổng TCP của máy chủ từ các thông báo trên bàn điều khiển. Tôi sẽ giả sử rằng máy chủ MySQL đang chạy trên số cổng mặc định là 3306.
Chạy các câu lệnh SQL sau để tạo bảng và cơ sở dữ liệu thử nghiệm của chúng tôi.
create database if not exists ebookshop; use ebookshop; drop table if exists books; create table books ( id int, title varchar(50), author varchar(50), price float, qty int, primary key (id)); insert into books values (1001, 'Java for dummies', 'Dang Kim Thi', 11.11, 11); insert into books values (1002, 'More Java for dummies', 'CodeLean VN', 22.22, 22); insert into books values (1003, 'More Java for more dummies', 'Mohammad Ali', 33.33, 33); insert into books values (1004, 'A Cup of Java', 'Kumar', 44.44, 44); insert into books values (1005, 'A Teaspoon of Java', 'Kevin Jones', 55.55, 55); select * from books;
4. Thao tác với cơ sở dữ liệu
Để kết nối và thao tác với cơ sở dữ liệu, chúng ta cần có 4 bước cơ bản như sau:
- Tạo ra một kết nối tới cơ sở dữ liệu, đối tượng đó là
Connection
.
- Tạo ra đối tượng câu lệnh
Statement
theo Connection
, để giữ lệnh SQL.
- Viết một truy vấn SQL và thực hiện truy vấn, thông qua
Statement
và Connection
được tạo.
- Xử lý kết quả truy vấn.
- Đóng
Statement
và Connection
giải phóng tài nguyên.
Chúng ta sẽ minh họa lập trình cơ sở dữ liệu Java bằng các ví dụ sau.
Connection
.Statement
theo Connection
, để giữ lệnh SQL.Statement
và Connection
được tạo.Statement
và Connection
giải phóng tài nguyên.3.1 Example 1: SQL SELECT
Đây là đoạn ví dụ thực hiện lệnh
SELECT
để truy vấn cơ sở dữ liệu MySQL.
Đặt tên file là "
JdbcSelectTest.java
" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | import java.sql.*; // Using 'Connection', 'Statement' and 'ResultSet' classes in java.sql package public class JdbcSelectTest { // Save as "JdbcSelectTest.java" (JDK 7 and above) public static void main(String[] args) { try ( // Step 1: Allocate a database 'Connection' object
|
- Các hoạt động JDBC được thực hiện thông qua các đối tượng "
Connection
", "Statement
" và "ResultSet
" (được xác định trong góijava.sql
). Tuy nhiên, bạn không cần biết chi tiết mà chỉ biết các phương thức công khai được xác định trong API (Giao diện chương trình ứng dụng). Bạn cũng không cần phải phát minh lại các bánh xe bằng cách tự tạo các lớp này (sẽ mất nhiều năm?!). Thành phần phần mềm "tái sử dụng" là một thế mạnh chính của OOP. - Lưu ý rằng có rất ít lập trình liên quan đến việc sử dụng lập trình JDBC. Bạn chỉ phải xác định URL cơ sở dữ liệu , viết truy vấn SQL và xử lý kết quả truy vấn. Các mã còn lại là loại "mẫu chương trình JDBC tiêu chuẩn". Một lần nữa, điều này là do các bánh xe đã được phát minh.
- Trong Dòng 7, chúng tôi tạo ra một đối tượng
Connection
(được gọiconn
) thông qua . Chương trình Java sử dụng cái gọi là URL cơ sở dữ liệu để kết nối với máy chủ:DriverManager.getConnection(database-url, db-user, password)
Phân tích chương trình
For MySQL:
// SyntaxConnection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ebookshop", "myuser", "xxxx");
- Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:{port}/{db-name}", "{db-user}", "{password}");
- // Example
Đây
database-url
là ở dạng " jdbc:mysql://{host}:{port}/{database-name}
", với giao thức jdbc
và giao thức con mysql
. Việc port
chỉ định số cổng TCP của máy chủ MySQL; db-user/password
là một người dùng MySQL được ủy quyền. Trong ví dụ của chúng tôi, "localhost
"(với địa chỉ IP đặc biệt của 127.0.0.1
) là tên máy chủ cho vòng lặp cục bộ; "3306
" là số cổng TCP của máy chủ và ebookshop
là tên cơ sở dữ liệu.- Trong Dòng 13, chúng tôi phân bổ một
Statement
đối tượng (được gọistmt
) trongConnection
thông quaconn.createStatement()
. - Để thực thi lệnh SQL SELECT, chúng ta gọi phương thức
stmt.executeQuery("SELECT ...")
. Nó trả về kết quả truy vấn trong mộtResultSet
đối tượng (được gọirset
). - Các
ResultSet
mô hình bảng được trả về, có thể được truy cập thông qua một con trỏ hàng . Con trỏ ban đầu định vị trước hàng đầu tiên trongResultSet
.rset.next()
di chuyển con trỏ đến hàng đầu tiên. Sau đó bạn có thể sử dụng để lấy giá trị của cột cho hàng đó, nơi tương ứng với các loại cột, chẳng hạn như , , và . Trả về ở hàng cuối cùng, kết thúc vòng lặp while.rset.getXxx(columnName)
Xxx
int
float
double
String
rset.next()
false
- Bạn có thể sử dụng để lấy tất cả các loại ( , , vv).
rset.getString(columnName)
int
double
- Để có tính di động tối đa,
ResultSet
các cột trong mỗi hàng phải được đọc theo thứ tự từ trái sang phải và mỗi cột chỉ được đọc một lần thông qua cácgetXxx()
phương thức. Phát hànhgetXxx()
cho một ô nhiều lần có thể gây ra lỗi lạ. - Trong ví dụ này, chúng tôi sử dụng tính năng mới của JDK 7 được gọi là tài nguyên thử, tự động đóng tất cả các tài nguyên đã mở trong mệnh đề thử, trong trường hợp của chúng tôi, các đối tượng
Connection
vàStatement
đối tượng.
Exercises 1:
Các bạn làm bài tương tự để thực hiện hiển thị kết quả của những câu lệnh
Các bạn làm bài tương tự để thực hiện hiển thị kết quả của những câu lệnh
SELECT
sau. SELECT * FROM books
SELECT title, price FROM books WHERE author = 'CodeLean VN'
SELECT title, author, price, qty FROM books WHERE author = 'CodeLean VN' OR price >= 30 ORDER BY price DESC, id ASC
Exercises 2:
Các bạn sử dụng cơ sở dữ liệu Northwind
để thực hiện hiển thị các thông tin sau:
1. Hiển thị danh sách khách hàng
2. Tìm khách hàng theo tên
3. Hiển thị danh sách sản phẩm
4. Tìm sản phẩm theo giá bán trong khoảng do người dùng nhập vào
5. Hiển thị thông tin chi tiết của một đơn hàng
Very Good
ردحذفإرسال تعليق