从 ResultSet 获取布尔值

Posted

技术标签:

【中文标题】从 ResultSet 获取布尔值【英文标题】:Getting Boolean from ResultSet 【发布时间】:2016-09-18 18:22:00 【问题描述】:

ResultSet#getBoolean 为 null 时似乎返回 false。 有没有一种简单的方法可以从ResultSet 获得Boolean(不是boolean)?

【问题讨论】:

【参考方案1】:

您可以在调用 getBoolean 后调用 wasNull。这里解释一下:https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#wasNull%28%29

【讨论】:

所以我必须使用:Boolean foo = result.getBoolean("bar"); if (result.wasNull()) foo = null;? 是的,你可以这样使用。 谢谢,帮了大忙【参考方案2】:

这应该可行:

    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();
    

【讨论】:

抛出 java.lang.AbstractMethodError @NadavB,不应该这样,至少对于 MySQL。我添加了一个完整的示例。 postgresql 发生在我身上。 wasNull 的第二个答案对我来说很好。所以也许你的答案只适用于 mySQL? @NadavB,是的,因为最初的问题仅与 MySQL 有关。 当 DB 列为空时,这也将返回 false,这是 OP 试图避免的。【参考方案3】:

您应该通过使用ResultSet.getObject() 并转换为Boolean 对象来获得所需的结果(即:当列值为空时为空)。

像这样:

Boolean someBool = (Boolean) rs.getObject("booleanColumnName");

我认为这是安全的,只要你的列类型对应于布尔值(即:TINYINT(1)),但测试一下。

This answer 做同样的事情,但使用 Integer 对象。

【讨论】:

Integer 不能转换为 Boolean 您将Object 投射到Boolean。 docs.oracle.com/javase/7/docs/api/java/sql/… The type of the Java object will be the default Java object type corresponding to the column's SQL type。阅读有关投射的信息。 Oracle 中没有布尔列,但 getBoolean 方法有效。【参考方案4】:
resultSet.getObject(1) == null ? null : resultSet.getBoolean(1)

【讨论】:

以上是关于从 ResultSet 获取布尔值的主要内容,如果未能解决你的问题,请参考以下文章

如何从firestore的路径中获取布尔值

ComboBoxItem 中的复选框绑定到 Class 中的布尔值。如何从每个项目中获取每个布尔值?

如果列表包含布尔值,如何从列表中获取整数的索引?

如何从光标中获取布尔值(Java SQLite)

Kotlin 类没有从 firebase 获取其布尔值

如何从开关状态获取布尔值?