Khi sử dụng JDBC và truy cập vào các kiểu dữ liệu thông qua một tập hợp kết quả, là có một cách thanh lịch hơn để đối phó với null/0 so với sau:Khi truy cập ResultSets trong JDBC, có cách nào thanh lịch để phân biệt giữa giá trị null và giá trị 0 không?
int myInt = rs.getInt(columnNumber)
if(rs.wasNull())?
{
// Treat as null
} else
{
// Treat as 0
}
Cá nhân tôi co rúm người lại bất cứ khi nào tôi nhìn thấy loại mã này. Tôi không thấy tại sao ResultSet không được định nghĩa để trả về các kiểu số nguyên được đóng hộp (ngoại trừ, có lẽ, hiệu năng) hoặc ít nhất là cung cấp cả hai. Điểm thưởng nếu bất kỳ ai cũng có thể thuyết phục tôi rằng thiết kế API hiện tại thật tuyệt vời :)
Giải pháp cá nhân của tôi là viết một trình bao trả về số nguyên (Tôi quan tâm nhiều hơn đến mã khách hàng hơn hiệu suất), nhưng tôi tự hỏi nếu tôi thiếu một cách tốt hơn để làm điều này.
Chỉ cần làm rõ, những gì làm phiền tôi về mã này không phải là chiều dài, mà thực tế là nó tạo ra sự phụ thuộc của nhà nước giữa các cuộc gọi tiếp theo và những gì xuất hiện như một getter đơn giản thực sự có tác dụng phụ trong cùng một hàng.
Rõ ràng những người chịu trách nhiệm thay thế a> b bằng a.compare (b)> 0 không thể tưởng tượng ra một thế giới mà bạn không muốn sử dụng getBigDecimal thay cho bất kỳ tùy chọn nào khác! – Affe
Không phải là câu trả lời mà là một gợi ý. "Tiến thoái lưỡng nan" này được xử lý trong http://www.jooq.org, nơi tất cả các kiểu số được coi là đối tượng, và "thực tế" JDBC này được tóm tắt ... Vì vậy, với jOOQ, không cần phải viết trình bao bọc của riêng bạn cho Những thiếu sót JDBC –