从 ResultSet 获取布尔值
Getting Boolean from ResultSet
ResultSet#getBoolean 为 null 时似乎 return false。
有没有简单的方法从 ResultSet
得到 Boolean
(不是 boolean
)?
你可以在调用getBoolean后调用wasNull。在这里解释:https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#wasNull%28%29
这应该有效:
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 时为 null)。
像这样:
Boolean someBool = (Boolean) rs.getObject("booleanColumnName");
我认为只要你的列类型对应布尔值(即:TINYINT(1)
),这是安全的,但是测试一下。
This answer 做同样的事情,但使用 Integer
对象。
resultSet.getObject(1) == null ? null : resultSet.getBoolean(1)
ResultSet#getBoolean 为 null 时似乎 return false。
有没有简单的方法从 ResultSet
得到 Boolean
(不是 boolean
)?
你可以在调用getBoolean后调用wasNull。在这里解释:https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#wasNull%28%29
这应该有效:
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 时为 null)。
像这样:
Boolean someBool = (Boolean) rs.getObject("booleanColumnName");
我认为只要你的列类型对应布尔值(即:TINYINT(1)
),这是安全的,但是测试一下。
This answer 做同样的事情,但使用 Integer
对象。
resultSet.getObject(1) == null ? null : resultSet.getBoolean(1)