Số hàng bị ảnh hưởng bởi SQL Update có thể được trả lại sử dụng SQL% ROWCOUNT (Đối với ORACLE) hoặc @@ ROWCOUNT (CHO SQL SERVER)
Lưu ý: Để trả lại số hàng được cập nhật, xóa, vv .. chúng ta phải sử dụng OUT Parameter trong Stored Procedure mà sẽ lưu trữ số lượng hàng được cập nhật, xóa vv ..
để có được số lượng hàng được cập nhật, xóa vv .. chúng ta phải sử dụng registerOutParameter phương pháp trong Java
Để lưu trữ số hàng được cập nhật hoặc xóa vv .. vào một trong các tham số OUTOUT trong thủ tục lưu sẵn, chúng ta phải đặt kiểu tham số trong tập lệnh trước khi thực hiện lệnh. (Trong trường hợp Update hoặc xóa nó sẽ NUMERIC)
Khi lệnh được thực thi, lưu trữ các giá trị cập nhật hoặc xóa hàng vào biến (Nó có thể biến mới hoặc biến sẵn trong lớp vv .) bằng cách gọi chỉ mục của tham số đó (ví dụ: A = cs.getInt (3) nếu tham số OUT trong quy trình được lưu trữ là Tham số thứ 2)
Bây giờ, biến có giá trị Cập nhật hoặc xóa hàng (ieA = 10)
Ví dụ cho porcedure Stored
Function demo(A varchar2(10), B OUT NUMBER)RETURN NUMBER IS EXIST_LP NUMBER;
BEGIN
UPDATE demo_temp SET name=A where name="ABC";
B:=SQL%ROWCOUNT -- total number of rows updated
RETRUN EXIST_LP;
END demo;
Ví dụ về kịch bản java
public void update(demo demo){
int rowCount = 0;
Connection conn = null;
CallableStatement cs = null;
try{
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("your data source path");
conn = ds.getConnection();
cs = conn.prepareCall("BEGIN ? :=demo_dbp.demo(?,?)); END;"); // stored proc
cs.registerOutParameter(1, Types.INTEGER);
cs.setString(2, "XYZ");
cs.registerOutParameter(3, Types.NUMERIC);
rowCount=cs.execcuteUpdate();
demo.setUpdateCount(cs.getInt(3));
} catch (SQLException exc) {
throw new DaoException("An SQL Exception has occurred.", exc);
} catch (NamingException ne) {
throw new DaoException("A Naming Exception has occurred.", ne);
} catch (Exception e) {
throw new DaoException("An Exception has occurred", e);
} finally {
try {
if (cs != null) {
cs.close();
}
} catch (SQLException ex1) {
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
}
}
}
Lưu ý: executeUpdate() không trả lại số hàng được cập nhật hoặc xóa.Nó chỉ trả về 0 hoặc 1.
- 0 - Thi Không
- 1 - Thực hiện thành công
đáng yêu :) Thanks guys –
Thật sự tôi đang gặp một vấn đề với điều này. Khi tôi chạy bản cập nhật cho một cột có giá trị X và cố gắng cập nhật nó thành X hơn truy vấn mysql thô trả về 0 khi hàng bị ảnh hưởng NHƯNG câu lệnh chuẩn bị java trả về số hàng ngay cả khi X không bao giờ thay đổi. –
Nó không thực sự là số lượng hồ sơ cập nhật, đó là số lượng hồ sơ phù hợp không may. Trong thiết lập của tôi (MySQL), tôi nhận được 1 cho giá trị trả về của executeUpdate() khi cập nhật một giá trị cho cùng một giá trị nhưng khi tôi chạy truy vấn theo cách thủ công trong Workbench, nó nói: 0 hàng (s) bị ảnh hưởng Hàng phù hợp: 1 Đã thay đổi : 0 Cảnh báo: 0 – mikato