Giới thiệu về Tuyên bố
Tất cả các truy vấn SQL có thể được chia thành hai nhóm một cách có điều kiện:
- Truy xuất dữ liệu - Chúng bao gồm câu lệnh CHỌN .
- Sửa đổi dữ liệu - Chúng bao gồm các câu lệnh INSERT , UPDATE và DELETE .
Đối với nhóm đầu tiên, phương thức giao diện Statement đã quen thuộc với chúng tôi được sử dụng - execQuery() . Về nguyên tắc, phương pháp này là khá đủ để bắt đầu. Nó bao gồm một tỷ lệ phần trăm rất lớn các truy vấn mà bạn sẽ cần sử dụng trong công việc thực tế.
Chúng ta sẽ có nhiều tùy chọn hơn sau, nhưng hiện tại, tôi khuyên bạn nên nhớ - nếu bạn chỉ muốn lấy dữ liệu từ một bảng, thì phương thức execQuery( ) trong phần lớn các trường hợp sẽ là lựa chọn phù hợp.
Đối với nhóm yêu cầu thứ hai, bạn cần sử dụng một phương thức khác của giao diện Tuyên bố - execUpdate() . Không giống như phương thức execQuery() trả về một Tập kết quả, phương thức này trả về một số nguyên cho bạn biết có bao nhiêu hàng trong bảng đã được thay đổi khi truy vấn của bạn được thực thi .
Ví dụ: bạn có thể xóa tất cả các hàng bằng câu lệnh DELETE FROM employee (vì vậy hãy hết sức cẩn thận). Trong trường hợp này, phương thức execUpdate() sẽ trả về số hàng đã xóa. Trong một số trường hợp, việc biết số lượng hàng đã thay đổi có thể hữu ích để xây dựng thuật toán làm việc với dữ liệu.
Về nguyên tắc, chúng ta có thể hoàn thành câu hỏi này - chúng ta đã thấy điều chính. Để tìm nạp dữ liệu - execQuery() . Để thay đổi dữ liệu - execUpdate() .
Lấy số lượng người dùng trong bảng người dùng bằng phương thức execQuery() :
ResultSet results = statement.executeQuery("SELECT Count(*) FROM user");
results.next();
int count = results.getInt(1);
thực thiUpdate()
Phương thức execUpdate() được sử dụng khi truy vấn của bạn thay đổi điều gì đó trong bảng. Nó có thể là bất cứ điều gì:
- CẬP NHẬT tuyên bố
- câu lệnh CHÈN
- câu lệnh XÓA
- Câu lệnh CALL PROCEDURE
Phương thức này trả về số hàng đã thay đổi (hoặc bị xóa).
Hãy viết một yêu cầu sẽ tăng lương cho tất cả nhân viên của chúng tôi thêm 1000 rúp.
int rowsCount = statement.executeUpdate("UPDATE employee SET salary = salary+1000");
Sau khi tôi chạy mã này, nó trả về số 6 trên bảng của tôi.Bảng của tôi có 6 hàng. Vì vậy, tất cả các dòng đã được thay đổi.
hành hình()
Đôi khi các tình huống có thể phát sinh trong cuộc sống của bạn khi bạn không biết chính xác mình phải thực hiện yêu cầu nào - lựa chọn hoặc thay đổi dữ liệu. Trong trường hợp này, những người tạo ra JDBC đã thêm một phương thức chung khác vào nó - exec() .
Phương thức này có thể được sử dụng thay cho các phương thức execQuery() và execUpdate() . Bạn có nhớ những phương pháp này khác nhau như thế nào không? Phải. Loại kết quả. Do đó, những người tạo ra JDBC đã đưa ra một giải pháp như vậy.
Phương thức exec() trả về giá trị boolean. Nếu giá trị này là true , thì yêu cầu tìm nạp dữ liệu đang được tiến hành và bạn cần gọi phương thức getResultSet() để lấy dữ liệu. Ví dụ:
boolean hasResults = statement.execute("SELECT Count(*) FROM user");
if ( hasResults ) {
ResultSet results = statement.getResultSet();
results.next();
int count = results.getInt(1);
}
Nếu giá trị này là false , thì yêu cầu thay đổi dữ liệu đang được tiến hành và bạn cần gọi phương thức getUpdateCount() để lấy số lượng hàng đã thay đổi. Ví dụ:
boolean hasResults = statement.execute("UPDATE employee SET salary = salary+1000");
if ( !hasResults ) {
int count = statement.getUpdateCount();
}
Hãy viết một phương thức hiển thị kết quả của một truy vấn:
public void executeAndPrintSQLQuery(String sqlQuery) {
boolean hasResults = statement.execute(sqlQuery);
if ( hasResults ) {
ResultSet results = statement.getResultSet();
System.out.println(“Your request lines below: ”);
while (results.next()) {
Integer id = results.getInt(1);
String name = results.getString(2);
System.out.println(results.getRow() + ". " + id + "\t"+ name);
}
}
else {
int count = statement.getUpdateCount();
System.out.println(“Number of name strings: ” + count);
}
}
Đây là cách phương thức exec() thường được sử dụng trong thực tế.
GO TO FULL VERSION