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

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

【问题讨论】:

    标签: java mysql sql resultset


    【解决方案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 投射到Booleandocs.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)
    

    【讨论】:

      猜你喜欢
      • 2016-07-08
      • 2012-02-01
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多