Tôi có một cột trong cơ sở dữ liệu của mình được nhập double
và tôi muốn đọc giá trị từ nó bằng cách sử dụng một JDBC ResultSet, nhưng nó có thể là null. Cách nào là tốt nhất để thực hiện việc này? Tôi có thể nghĩ đến ba lựa chọn mà không có lựa chọn nào trong số đó có vẻ rất tốt.Làm thế nào để tôi trong JDBC đọc một giá trị có thể null gấp đôi từ resultSet?
Lựa chọn 1: Xấu vì xử lý ngoại lệ tiết và mùi
double d;
try {
d = rs.getDouble(1);
// do something
} catch(SQLException ex) {
if(rs.wasNull()) {
// do something else
} else {
throw ex;
}
}
Phương án 2: Xấu vì hai fetches
s = rs.getString(1); // or getObject()
if(s == null) {
// do something else
} else {
double d = rs.getDouble(1);
// do something
}
Lựa chọn 3: Bad vì Java chứ không phải là SQL chuyển đổi
s = rs.getString(1); // or getObject()
if(s == null) {
// do something else
} else {
double d = Double.parseDouble(s);
// do something
}
Bất kỳ đề xuất nào về cách nào tốt hơn, hoặc có cách nào vượt trội hơn không? Và xin vui lòng không nói "Sử dụng Hibernate", tôi bị giới hạn mã JDBC chỉ ở đây.
omg. cảm ơn mặc dù –
lưu ý rằng không có sqlexception khi lấy null nguyên thủy từ một tập kết quả. giá trị mặc định cho nguyên thủy đó được trả về trong các trường hợp như vậy (0 cho int, 0.0 cho double, etc ....). Do đó tại sao .wasNull() là một điều ác cần thiết. – Matt
Tôi đã có phản ứng giống hệt như @JosefPfleger khi tôi nhận ra cách JDBC vani hoạt động liên quan đến null. Nếu bạn muốn tiếp tục sử dụng SQL thuần túy, mặc dù (trái ngược với việc áp dụng ORM) và tránh sự thất bại này, tôi khuyên bạn nên sử dụng 'JdbcTemplate' của Spring, nó sẽ kiểm tra tất cả các kiểm tra rỗng cho bạn. –