CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN về thực thi hàng loạt Java JDBC phương thức execBatch này được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.
giao dịch JDBC
Trong cơ sở dữ liệu, cái gọi là giao dịch đề cập đến một tập hợp các đơn vị hoạt động logic chuyển đổi dữ liệu từ trạng thái này sang trạng thái khác. Để đảm bảo tính nhất quán của dữ liệu trong cơ sở dữ liệu, các thao tác dữ liệu phải là các nhóm đơn vị logic riêng biệt: khi hoàn thành tất cả, tính nhất quán của dữ liệu có thể được duy trì và khi một phần thao tác trong đơn vị này bị lỗi thì toàn bộ giao dịch sẽ hoàn toàn bị bỏ qua là một lỗi, tất cả các thao tác từ điểm bắt đầu trở đi phải được khôi phục về trạng thái bắt đầu.
Hoạt động giao dịch: trước tiên hãy xác định và bắt đầu giao dịch, sau đó sửa đổi dữ liệu. Nếu bạn gửi (COMMIT), những sửa đổi này sẽ được lưu vĩnh viễn. Nếu bạn quay lại (ROLLBACK), hệ thống quản lý cơ sở dữ liệu sẽ từ bỏ tất cả các sửa đổi bạn đã thực hiện. Và quay trở lại trạng thái khi giao dịch được bắt đầu.
Thuộc tính ACID của giao dịch
1. Tính nguyên tử Tính nguyên tử có nghĩa là một giao dịch là một đơn vị công việc không thể chia cắt và các hoạt động trong giao dịch đều xảy ra hoặc không xảy ra. .
2. Tính nhất quán (Consistency) Một giao dịch phải chuyển đổi cơ sở dữ liệu từ trạng thái nhất quán này sang trạng thái nhất quán khác. (Dữ liệu không bị hủy).
3. Cô lập: Sự cô lập của một giao dịch có nghĩa là việc thực hiện một giao dịch không thể bị can thiệp bởi các giao dịch khác, nghĩa là các hoạt động và dữ liệu được sử dụng trong một giao dịch được tách biệt khỏi các giao dịch đồng thời khác và các giao dịch được thực hiện đồng thời không thể bị gián đoạn. can thiệp lẫn nhau.
4. Độ bền.
Độ bền có nghĩa là sau khi một giao dịch được thực hiện, những thay đổi của nó đối với dữ liệu trong cơ sở dữ liệu là vĩnh viễn và các hoạt động tiếp theo cũng như lỗi cơ sở dữ liệu sẽ không có bất kỳ tác động nào đến nó.
Trong JDBC, các giao dịch được gửi tự động theo mặc định. Mỗi khi một câu lệnh SQL được thực thi, nếu thực thi thành công, nó sẽ tự động được gửi đến cơ sở dữ liệu và không thể khôi phục.
Để thực thi nhiều câu lệnh SQL dưới dạng một giao dịch:
- Gọi setAutoCommit(false); của đối tượng Connection trước khi thực hiện câu lệnh để hủy giao dịch cam kết tự động
- Sau khi tất cả các câu lệnh SQL được thực thi thành công, hãy gọi phương thức commit() để thực hiện giao dịch.
- Khi xảy ra ngoại lệ, hãy gọi phương thức rollback(); để khôi phục giao dịch.
Thực thi hàng loạt JDBC
Khi bạn cần chèn hoặc cập nhật các bản ghi theo đợt. Cơ chế cập nhật hàng loạt của Java có thể được sử dụng, cho phép nhiều câu lệnh được gửi tới cơ sở dữ liệu để xử lý hàng loạt cùng một lúc. Thông thường hiệu quả hơn so với xử lý gửi riêng biệt.
Các câu lệnh xử lý hàng loạt JDBC bao gồm hai phương thức sau:
addBatch(String): Thêm các câu lệnh hoặc tham số SQL yêu cầu xử lý hàng loạt;
execBatch(); thực hiện các câu lệnh xử lý hàng loạt;
clearBatch(); Xóa gói hàng loạt.
Thông thường chúng ta gặp hai tình huống trong đó các câu lệnh SQL được thực thi theo đợt:
Xử lý hàng loạt nhiều câu lệnh SQL;
?
1
2
3
4
5
6
7
8
9
10
|
vì
(
số nguyên
tôi =
1
; tôi <
5000
; tôi++) {
sql =
"chèn vào giá trị person(id,name,email)("
+ tôi
",'tên"
+ tôi +
"','e-mail"
+ tôi +
"')"
;
stmt.addBatch(sql);
nếu như
((tôi+
1
)%
1000
==
0
){
stmt.executeBatch();
stmt. clearBatch();
}
}
|
Truyền tham số hàng loạt của một câu lệnh SQL;
?
1
2
3
4
5
6
7
8
9
10
11
12
|
vì
(
số nguyên
tôi=
1
;tôi<
100000
;tôi++){
pstmt. setInt(
1
, Tôi);
pstmt. setString(
2
,
"tên"
+tôi);
pstmt. setString(
3
,
"e-mail"
+tôi);
pstmt.addBatch();
nếu như
((tôi+
1
)%
1000
==
0
){
pstmt.executeBatch();
pstmt. clearBatch();
}
}
|
JDBC thực thi các câu lệnh SQL và có hai giao diện xử lý là Chuẩn bị và Câu lệnh. Nói chung, Chuẩn bị sẵn sàng được sử dụng phổ biến hơn để vận hành JDBC.
Tuy nhiên, khi thực thi các lô, preparedStatement hơi thiếu cho câu lệnh.
?
1
2
3
4
5
6
7
8
9
|
ps = conn.prepareStatement(sql);
vì
(
số nguyên
tôi =
0
;tôi<
10
;tôi++){
ps. setString(
1
,
"1"
);
ps.addBatch();
}
ps.addBatch(
"SQL tĩnh"
);
ps.executeBatch();
|
Điều này được thực hiện bình thường.
Nhưng việc đặt preparesStatement vào bên trong không có tác dụng gì cả, cụ thể như sau:
?
1
2
3
4
5
6
|
vì
(
số nguyên
tôi =
0
;tôi<
10
;tôi++){
ps = conn.prepareStatement(sql);
ps. setString(
1
,
"1"
);
ps.addBatch();
}
ps.executeBatch();
|
Câu lệnh phù hợp để gán vòng lặp cho sql, đoạn mã như sau:
?
1
2
3
4
5
6
7
8
9
|
Câu lệnh st = conn.createStatement();
vì
(
số nguyên
tôi =
0
;tôi<
10
;tôi++){
st.addBatch(
"sql tĩnh......."
);
}
st.executeBatch();
|
Điều này là để thực hiện tất cả các câu lệnh bình thường.
Tóm tắt: Lý do cho việc này là
Câu lệnh st = conn.createStatement(); Bạn không cần đặt câu lệnh SQL ở đây.
ps = conn.prepareStatement(sql); Phần này phải chứa câu lệnh SQL ban đầu.
Xử lý hàng loạt JDBC không thể thêm các câu lệnh chọn, nếu không sẽ đưa ra một ngoại lệ:
java.sql.BatchUpdateException: Không thể phát hành SELECT qua executeUpdate(). tại com.MySQL.jdbc.StatementImpl.executeBatch(StatementImpl.java:1007) 。
Đến đây là kết thúc bài viết về giải thích chi tiết về phương thức execBatch thực thi hàng loạt Java JDBC. Để biết thêm thông tin về thực thi hàng loạt Java JDBC execBatch, vui lòng tìm kiếm các bài viết trước của tôi hoặc tiếp tục duyệt qua các bài viết có liên quan bên dưới. ! .
Liên kết gốc: https://www.cnblogs.com/shizhijie/p/7458813.html.
Cuối cùng, bài viết này về giải thích chi tiết về phương thức execBatch thực thi hàng loạt Java JDBC kết thúc tại đây. Nếu bạn muốn biết thêm về giải thích chi tiết về phương thức thực thi hàng loạt Java JDBC execBatch, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục duyệt qua các bài viết liên quan. Tôi hy vọng bạn sẽ hỗ trợ nó trong tương lai blog của tôi! .
Tôi là một lập trình viên xuất sắc, rất giỏi!