Bạn đã hiểu sai giá trị trả về của PreparedStatement#execute()
.
Vui lòng đọc kỹ javadoc:
Trả về:
true
nếu kết quả đầu tiên làResultSet
vật;false
nếu kết quả đầu tiên là số lượng cập nhật hoặc không có kết quả.
Do đó, nó trả về - như hoàn toàn mong đợi - false
trên một INSERT
truy vấn. Nó chỉ trả về true
trên SELECT
truy vấn (tuy nhiên bạn thường muốn sử dụng executeQuery()
thay vào đó trả về trực tiếp một ResultSet
).
Nếu bạn quan tâm đến các hàng bị ảnh hưởng, hãy sử dụng PreparedStatement#executeUpdate()
thay thế. Nó trả về một int
theo javadoc:
Trả về:
hoặc (1) số hàng cho câu lệnh Ngôn ngữ thao tác dữ liệu SQL (DML) hoặc (2) 0 cho câu lệnh SQL không trả về gì
Khi đó giá trị trả về bằng 1 hoặc lớn hơn sẽ cho biết việc chèn thành công.
Không liên quan vấn đề cụ thể:mã của bạn đang làm rò rỉ tài nguyên DB. Vui lòng đọc kỹ Tần suất kết nối, Câu lệnh và Bộ kết quả được đóng trong JDBC?