当ResultSet#getBoolean为空时,它似乎返回FALSE。有没有从ResultSet获得Boolean(而不是boolean)的简单方法?
ResultSet
Boolean
boolean
ljsrvy3e1#
您可以在调用getBoolean之后调用wasNull。这里有解释:https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#wasNull%28%29
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(); }
azpvetkf3#
resultSet.getObject(1) == null ? null : resultSet.getBoolean(1)
yhqotfr84#
您应该通过使用ResultSet.getObject()然后强制转换为Boolean对象来获得所需的结果(即,如果列值为空,则为空)。就像这样:
ResultSet.getObject()
Boolean someBool = (Boolean) rs.getObject("booleanColumnName");
我认为这是安全的,只要您的列类型对应于Boolean(即:TINYINT(1)),但请测试它。This answer执行相同的操作,但使用Integer对象。
TINYINT(1)
Integer
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")
5条答案
按热度按时间ljsrvy3e1#
您可以在调用getBoolean之后调用wasNull。这里有解释:https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#wasNull%28%29
o8x7eapl2#
这应该是可行的:
azpvetkf3#
yhqotfr84#
您应该通过使用
ResultSet.getObject()
然后强制转换为Boolean
对象来获得所需的结果(即,如果列值为空,则为空)。就像这样:
我认为这是安全的,只要您的列类型对应于Boolean(即:
TINYINT(1)
),但请测试它。This answer执行相同的操作,但使用
Integer
对象。lvjbypge5#
您可以使用Java可选来实现这一点:
..。