ResultSet#getBoolean方法在返回null时似乎会返回false。
有没有一种简单的方法从ResultSet中获取一个Boolean(而不是boolean)?
try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test?serverTimezone=UTC");){
// create table bool_table (bool_value boolean);
// insert into bool_table values (null);
String sql = "SELECT * FROM bool_table";
try (PreparedStatement preStmt = conn.prepareStatement(sql)){
try (ResultSet rs = preStmt.executeQuery()) {
rs.next();
System.out.println(rs.getObject(1, Boolean.class));
}
} catch (SQLException e) {
e.printStackTrace();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
ResultSet.getObject()
方法并将其转换为Boolean
对象来获得期望的结果(即:在列值为空时返回null)。Boolean someBool = (Boolean) rs.getObject("booleanColumnName");
只要你的列类型对应于布尔值(即:TINYINT(1)
),我认为这是安全的,但请测试一下。
这个答案 使用了Integer
对象来实现相同的功能。
Integer
无法转换为 Boolean
。 - Alex78191Object
强制转换为 Boolean
。https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#getObject(int) - theyuvresultSet.getObject(1) == null ? null : resultSet.getBoolean(1)
public static Boolean getNullableBoolean(ResultSet rs, String column) throws SQLException {
return Optional.ofNullable((Boolean)rs.getObject(column))
.map(Boolean::booleanValue).orElse(null);
}
...
getNullableBoolean(rs, "my_boolean_column")
Boolean foo = result.getBoolean("bar"); if (result.wasNull()) foo = null;
是吗? - Priv