Chức năng này không được hỗ trợ. Nhưng bạn có thể bọc Statement và ghi đè addBatch() bằng cách thêm một thành viên đếm. Nếu sử dụng Apache Commons DBCP, bạn có thể kế thừa từ DelegatingPreparedStatement
, nếu không bạn không có trình bao bọc cho PreparedStatement
. Vì vậy, tôi đã sử dụng proxy để thêm phương thức:
public class BatchCountingStatementHandler implements InvocationHandler {
public static BatchCountingStatement countBatches(PreparedStatement delegate) {
return Proxy.newProxyInstance(delegate.getClassLoader(), new Class[] {BatchCountingStatement.class}, new BatchCountingStatementHandler(delegate));
}
private final PreparedStatement delegate;
private int count = 0;
private BatchCountingStatementHandler(PreparedStatement delegate) {
this.delegate = delegate;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if ("getBatchCount".equals(method.getName())) {
return count;
}
try {
return method.invoke(delegate, args);
} finally {
if ("addBatch".equals(method.getName())) {
++count;
}
}
}
public static interface BatchCountingStatement extends PreparedStatement {
public int getBatchCount();
}
}
Nguồn
2010-09-20 08:16:20
Tôi nghĩ Rakesh muốn nhận số lượng lô trước khi thực thi. Nếu không bằng cách sử dụng executeBatch là OK. – rics