xem xét phương pháp này rất đơn giản:Làm cách nào để xử lý các giá trị NULL và thông thường mà không sử dụng các câu lệnh chuẩn bị khác nhau?
public ResultSet getByOwnerId(final Connection connection, final Integer id) throws SQLException {
PreparedStatement statement = connection.prepareStatement("SELECT * FROM MyTable WHERE MyColumn = ?");
statement.setObject(1, id);
return statement.executeQuery();
}
Phương pháp dụ là vụ để chọn tất cả mọi thứ từ một số bàn nơi trận giá trị của một cột, mà nên được đơn giản. Các chi tiết xấu xí là đi qua NULL cho id sẽ dẫn đến một ResultSet trống, bất kể có bao nhiêu hàng có trong DB vì SQL định nghĩa NULL là không euqaling anyting, thậm chí không NULL. Cách duy nhất để chọn những hàng tôi biết đang sử dụng một khác nhau mệnh đề where:
SELECT * FROM MyTable WHERE MyColumn IS NULL
Đáng tiếc là cách duy nhất để thực hiện công việc phương pháp đúng trong mọi trường hợp có vẻ là để có hai pathes thực hiện hoàn toàn khác nhau, một đối với trường hợp đối số id là null và một đối với các giá trị thông thường.
Điều này rất xấu và khi bạn có nhiều cột có thể bị vô hiệu hóa có thể rất lộn xộn một cách nhanh chóng. Làm thế nào có thể xử lý NULL và các giá trị bình thường với cùng một đường dẫn mã/tuyên bố?
tôi không sử dụng JDBC, nhưng trong C# Tôi thường thiết lập này lên để các '='/'là NULL' động đã chọn?. Tham số, nếu có, vẫn bị ràng buộc thông qua câu lệnh đã chuẩn bị. –
Nếu bạn đang sử dụng SQL Server, bạn chỉ có thể thực hiện 'SET ANSI_NULLS OFF' và' field = NULL' sẽ hoạt động. – NullUserException
Hãy xem xét Hibernate hoặc JPA. Nó sẽ giúp bạn tiết kiệm từ JDBC boilerplate. – BalusC