关于JDBCUtils工具类的介绍与使用

前言

程序员的天职是什么?在我看来,最基础的能力就是消灭重复化的劳动,把一切繁杂琐碎的事整合为程序化的任务。
基于此目的,我们把一些常用的变量和方法封装入JDBCUtils类中,即可达到一劳永逸的美好编程体验。

[注] 本文以阿里提供的Druid为例,阅读本文前应对其有基本了解。如果没有就把代码当成例子来看,想要实现必须有Druid.jar和Druid.properties文件,本文不会赘述。


一、JDBCUtils是什么?

直观上来看,JDBC指的是Java Database Connectivity 即Java数据库连接,Utils意为通用工具类,由此可知,这个类将承担为主服务类提供工具的任务。
正如前言中所说的,在访问数据库数据的过程中,有很多代码重复度很高,因此我们把这些重复的代码封装入工具类中,以此来提高程序的观赏性和可读性,还能显著提高我们的编程效率。

二、JDBCUtils由哪些部分组成?

众所周知,JDBC操作数据的流程分为五个步骤。

1.加载驱动
2.获取连接
3.获得执行sql语句的对象
4.处理得到的数据集
5.释放资源

以上五个步骤都有必要编入工具类中,但除此之外,我们还需要把一些常用到的变量设为静态变量放入工具类的首部。

1、常用变量

代码如下:

    private static String DriverClass;//加载驱动时的路径
    private static String Url;//数据库的路径
	private static String Username;//数据库的登录名
	private static String Password;//数据据库的登录密码
    private static DataSource ds;//数据集

2、完成初始化操作

[注]:可能会有人看不懂下面代码里注释中写的配置文件是什么,这时候你就得再仔细看看前言啦!但没关系,两个选择,了解一下阿里的Druid,或者忽略2,其实不影响你看后文的。

代码如下:

	static {
		// 加载配置文件中的数据
		//想知道有哪些数据可以去看看官方文档哦
		InputStream ist = JDBCUtils.class.getClassLoader().getResourceAsStream("/druid.properties");
		Properties prop = new Properties();
		try {
			prop.load(ist);
			// 创建连接池,使用配置文件中的参数
			ds = DruidDataSourceFactory.createDataSource(prop);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

3、获取连接

// 获取数据库连接对象
public static synchronized Connection getConnection() {
   if (dataSource == null || dataSource.isClosed())
   try {
   	return dataSource.getConnection();
   } catch (SQLException e) {
   	e.printStackTrace();
   }
   return null;
}

4、非查询方法(增删改等功能)

public static int exeUpdate(String sql, Object... params) {    //params意为参数
	 //注意,Object... params,这是java的新特性,叫做变长数组,不知道的小伙伴可以学习一下
	Connection coon = null;
	PreparedStatement ps = null;
	try {
		coon = getConnnection();
		ps = coon.prepareStatement(sql);    //prepareStatement可有效防止sql注入攻击
	} catch (SQLException e) {
		e.printStackTrace();
	}
	if (Objects.nonNull(params)) {
			try {
				ps.setObject(object, params);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	int i = 0;   //这里的i表示的是完成操作的数量,或者说是受影响的数据库数据的数量。
	try {
		i = ps.executeUpdate();
		close(coon,ps);
	} catch (SQLException e) {
		e.printStackTrace();
	}
	return i;   //注意这里和查询方法的区别
}

5、查询方法

public static <T> T queryOne(Class<T> t, String sql, Object... params) {
//再次强调 Object... params 变长数组
	List<Map<String, Object>> list = getDataPair(sql,params);
	if(!list.isEmpty()){
		Map<String, Object> map = list.get(0);
		T obj = parseMapToBean(map,t);
		return obj;
	}
	return null;
}

6、释放资源

public static void close(PrepareStatement ps,Connection conn) {
	if(conn != null) { 
		try {
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	if(ps != null) {
		try {
			ps.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
public static void close(ResultSet rs,PrepareStatement ps,Connection conn) {
	if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        JDBCUtils.close(pstmt,conn);
	}


三、总结

以上就是我对JDBCUtils的理解,本文仅仅简单介绍了这个JDBCUtils的组成与使用,有兴趣可以看看阿里Druid的官方文档。
本文的JDBCUtils类是借助Druid实现的,但其实Druid是主要应用于数据库连接池方面,且表现极为出色,还请读者千万误解。
也许有时间我还会再写一篇关于它的博客。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值