Java判断数据库结果集ResultSet 中是否存在指定列名

最近最项目,项目的持久化部分用的是spring jdbc,查询出来的结果集要映射为对象,每次都在查询SQL的方法内定义私有的mapper 变量,内部实现mapRow 方法,似乎有些浪费,就想着定义一个公用的mapRow 实现,节省代码,方便维护。

在写的过程中,发现一个问题,就是涉及到一个很大的对象,属性非常多,但每次查询出来的属性却又都不一样,,这样的公用mapRow 该怎么写呢,能否根据结果集中是否有某个属性,才让其映射,没有的就不再映射呢?

立马翻开jdk api,找到ResultSet ,找了又找,没有找到相应的方法。

但jdk中有一个方法,可以利用起来,什么方法呢?

findColumnint findColumn(String columnLabel)throws SQLException将给定的 ResultSet 列标签映射到其 ResultSet 列索引。 参数:columnLabel – 使用 SQL AS 子句指定的列标签。如果未指定 SQL AS 子句,则标签是列名称 返回:给定列名称的列索引 抛出:SQLException – 如果 ResultSet 对象不包含标记为 columnLabel 的列,发生数据库访问错误或在已关闭的结果集上调用此方法 ResultSet 中的findColumn方法,返回指定的列名在结果集中的索引,索引值从1开始。

假如返回结果集中依次包含id,name,age ,则

findColumn("id") // 1findColumn("name") // 2findColumn("age") // 3

如果通过findColumn去查找一个不存在的列名时,出现什么情况呢?抛出SQLException。

这里介绍的方法,就是将findColumn 和SQLException 组合起来,组成的方法。

/** * 判断查询结果集中是否存在某列 * @param rs 查询结果集 * @param columnName 列名 * @return true 存在; false 不存咋 */public boolean isExistColumn(ResultSet rs, String columnName) {try {if (rs.findColumn(columnName) > 0 ) {return true;} }catch (SQLException e) {return false;}return false;} if 条件内,如果rs.findColumn(columnName) > 0 ,ResultSet结果集中的列索引从1开始,不同于数组和list的从0开始,所以如果找到某列,那么它的索引值必然大于0;如果没有找到呢,那么就会有SQLException 异常抛出来,我们这里将这个SQLException 异常利用起来,如果进入异常块,则说明没有找到该列,那么直接返回false就可以了。

这样在mapRow 中,如果多个属性的时候,每次可以判断下,该ResultSet 中是否查询出来该列,查询出来了就做映射,没有查询出,则不做具体事情,从而更好的公用了mapRow。

没有人会帮你一辈子,所以你要奋斗一生。

Java判断数据库结果集ResultSet 中是否存在指定列名

相关文章:

你感兴趣的文章:

标签云: