如何从MySQL查询的ResultSet中获取非空字符串的最简方法
从ResultSet获取非空字符串的简洁实现
针对你遇到的问题,这里有几种更简洁且实用的实现方式:
1. 内嵌三元运算符(最直接的简洁写法)
直接在调用处使用三元运算符判断,无需额外变量,非常适合在构造对象的参数列表里使用:
Discount.create( rs.getString("Code") == null ? "" : rs.getString("Code"), rs.getString("Df") == null ? "" : rs.getString("Df"), rs.getString("Di") == null ? "" : rs.getString("Di") );
注:同一行ResultSet重复调用getString不会有性能问题,光标停留在当前行,两次读取的是同一个字段值。
2. 封装工具方法(复用性最高)
如果需要多次处理这类场景,写一个静态工具方法封装逻辑,后续调用只需一行代码:
// 工具类里的静态方法 public static String getStringOrEmpty(ResultSet rs, String columnName) throws SQLException { String value = rs.getString(columnName); return value == null ? "" : value; } // 调用示例 Discount.create( DbUtils.getStringOrEmpty(rs, "Code"), DbUtils.getStringOrEmpty(rs, "Df"), DbUtils.getStringOrEmpty(rs, "Di") );
这种方式代码可读性更高,也避免了重复写判断逻辑。
3. Java 8+ Optional 风格写法
用Optional的空值处理能力实现,写法更简洁且符合函数式编程风格:
Discount.create( Optional.ofNullable(rs.getString("Code")).orElse(""), Optional.ofNullable(rs.getString("Df")).orElse(""), Optional.ofNullable(rs.getString("Di")).orElse("") );
注意:rs.getString会抛出SQLException,需要确保代码在try-catch块中处理异常。
补充说明你之前的方法:
- 你尝试的
String.valueOf(rs.getObject("column"))存在正确性问题:当字段为null时,rs.getObject返回null,String.valueOf(null)会返回字符串"null",而不是空字符串,不符合需求。 - 先获取再判断的方法虽然正确,但确实不够简洁,上面的几种方式都能解决这个痛点。
内容的提问来源于stack exchange,提问作者Сергей Соколов
相关产品推荐
相关产品推荐

