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

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

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

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

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

findColumn
int findColumn(String columnLabel)
               throws SQLException将给定的 ResultSet 列标签映射到其 ResultSet 列索引。 

参数:
    columnLabel - 使用 SQL AS 子句指定的列标签。如果未指定 SQL AS 子句,则标签是列名称
返回:
    给定列名称的列索引
抛出:
    SQLException - 如果 ResultSet 对象不包含标记为 columnLabel 的列,发生数据库访问错误或在已关闭的结果集上调用此方法

ResultSet 中的findColumn方法,返回指定的列名在结果集中的索引,索引值从1开始。

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

findColumn("id") // 1

findColumn("name") // 2

findColumn("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。

时间: 2024-10-23 09:32:38

Java判断数据库结果集ResultSet 中是否存在指定列名的相关文章

java连接Oracle数据库,从ResultSet中提取数据出现java.sql.sqlException结果集已耗尽

出现错误的原因是ResultSet中并没有任何东西,再调用next()方法就会出错,原因可能是oracle创建用户,表没有提交,commit即可

MySQL---数据库从入门走向大神系列(十一)-Java获取数据库/结果集的元信息、将数据表写入excel表格

数据库的元信息: 首先介绍一下数据库的元信息(元数据): 元数据(Metadata)是关于数据的数据. 元数据是描述数据仓库内数据的结构和建立方法的数据. 存储的数据是什么类型,什么驱动等等,这些描述数据的数据,就是元数据! 准备: package cn.hncu.pool3; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; i

Java判断数据库表是否存在的方法

一.需求 最近在写一个程序,需要取数据库表的数据之前,需要先查看数据库是否存在该表否则就跳过该表. 二.解决方案(目前想到两种,以后遇到还会继续添加): 1.建立JDBC数据源,通过Java.sql.DatabaseMetaData接口来判断 备注:参数分析 getTables(String catalog,String schemaPattern,String tableNamePattern,String[] types) 参数: catalog:目录名称,一般都为空. 参数:schema:

使用java代码对zookeeper集群中的solrCloud数据进行CURD

1 导入相关的pom依赖 <dependencies> <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>4.10.2</version> </dependency> <dependency> <groupId>commons-logging

JAVA对数据库进行操作,实现数据库中数据的插入,查询,更改,删除操作

(—)通过mysql workbench 创建一个数据库,在这里命名为company,然后建一个tb_employee表 (二)以下是java代码对表tb_employee的操作 1 创建一个Employee类,包括员工的一些信息,如  id  name age sex 2创建DatabaseConnection类,用于数据库的连接 3创建一个EmployeeOperation类,用于操作数据库,它里面包括了 以下方法 (1)getInstance()   //返回EmployeeOperati

Java嵌入式数据库H2学习总结(二)——在Web应用程序中使用H2数据库

一.搭建测试环境和项目 1.1.搭建JavaWeb测试项目 创建一个[H2DBTest]JavaWeb项目,找到H2数据库的jar文件,如下图所示: H2数据库就一个jar文件,这个Jar文件里面包含了使用JDBC方式连接H2数据库时使用的驱动类,将"h2-1.4.183.jar"加入到[H2DBTest]项目中,如下图所示: 1.2.开启H2数据库 进入到h2\bin目录,如下图所示: 确保H2数据库使用的8082端口没有被其他应用程序占用,正常启动之后输入"http://

java操作数据库的3中基本方式

//jdbc提取出来的工具类 package utils; import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.u

基于Oracle数据库锁机制,解决集群中的并发访问问题

1.需求 应用场景是这样的: 使用Oracle数据保存待办任务,使用状态字段区分任务是否已经被执行.多个Worker线程同时执行任务,执行成功或失败后,修改状态字段的值. 假设数据库表结构如下所示. create table Task( id varchar2(32), name varchar2(32), flag varchar2(1), worker varchar2(32) ); flag 可取的值包括:0-待办,1-已办,-1-失败待重试. 需要避免的问题: 多个Worker同时工作时

java判断字符串中是否包含汉字

原文:java判断字符串中是否包含汉字 源代码下载地址:http://www.zuidaima.com/share/1550463517428736.htm package com.zuidaima.util; /** *@author www.zuidaima.com **/ public class test { public static void main(String[] args) { String a = "中国China"; for (int i=a.length();