mysql 从结果集获取布尔值

2w3kk1z5  于 2022-12-10  发布在  Mysql
关注(0)|答案(5)|浏览(193)

当ResultSet#getBoolean为空时,它似乎返回FALSE。
有没有从ResultSet获得Boolean(而不是boolean)的简单方法?

ljsrvy3e

ljsrvy3e1#

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

o8x7eapl

o8x7eapl2#

这应该是可行的:

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

azpvetkf3#

resultSet.getObject(1) == null ? null : resultSet.getBoolean(1)
yhqotfr8

yhqotfr84#

您应该通过使用ResultSet.getObject()然后强制转换为Boolean对象来获得所需的结果(即,如果列值为空,则为空)。
就像这样:

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

我认为这是安全的,只要您的列类型对应于Boolean(即:TINYINT(1)),但请测试它。
This answer执行相同的操作,但使用Integer对象。

lvjbypge

lvjbypge5#

您可以使用Java可选来实现这一点:

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")

相关问题