欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JDBC总结——JDBC工具类

程序员文章站 2022-05-19 11:57:25
...


JDBC工具类

一、JDBC工具类概述

1、定义JDBC工具类的目的

每次使用JDBC的时候都要书写冗长的代码段,不符合复用的理念,于是要单独写一个类,将通用的JDBC操作写到一个类中,便于重复使用和精简代码。

2、封装的操作

	 1)properties配置文件 封装获取链接 释放资源提高代码复用性

	 2)类加载时加载驱动

	 3)ThreadLocal 控制事务

	 4)连接池 提高资源利用率

	 5)rowmapper封装 减少代码冗余

	 6)template封装 减少dao层代码冗余

二、JDBC工具类的封装

1、dbcp.properties

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybase?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
username=root
password=123
initialSize=10
maxActive=50
maxIdle=20
minIdle=5
maxWait=60000
connectionProperties=useUnicode=true;characterEncoding=utf-8
defaultAutoCommit=true
defaultTransactionIsolation=READ_COMMITTED

2、JdbcUtil3.java

import java.io.*;
import java.sql.*;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;
/**
 * 类说明:
 * 	用于加载驱动获取链接,然后返回结果集
 */
public class JdbcUtil3 {
	//声明连接池
	static DataSource pool = null;
	//创建properties
	static Properties pro = new Properties();
	//创建ThreadLocal<Connection>,可以为同一个线程保存同一个连接,为不同的线程保存不同的连接。
	private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
	//加载驱动
	static{
		InputStream is = null;
		try{
			is = JdbcUtil1.class.getResourceAsStream("/conf/dbcp.properties");
			//加载文件
			pro.load(is);
			//Class.froName(pro.getProperty("driverClassName"));
			//创建连接池
			pool = BasicDataSourceFactory.createDataSource(pro);
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try {
				is.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	//获取链接
	public static Connection getConnection() throws Exception{
		Connection conn = tl.get();
		if(conn==null){
			String url = pro.getProperty("url");
			String user = pro.getProperty("username");
			String password = pro.getProperty("password");
			//从连接池中获取链接
			//conn = DriverManager.getConnection(url, user, password);
			conn = pool.getConnection();
			//将链接保存到当前线程
			tl.set(conn);
		}
		return conn;
	}
																							
	//释放资源/关闭链接
	public static void release(ResultSet rs,PreparedStatement pstm,Connection conn) throws Exception{
		if(rs!=null){
			rs.close();
		}
		if(pstm!=null){
			pstm.close();
		}
		if(conn!=null){
			conn.close();
			tl.remove();	//将链接从当前线程移除
		}
	}
}

3、JdbcTemplate.java

import java.sql.*;
import java.util.*;

import rowmapper.RowMapper;
/**
 * 类说明:
 * 	用于封装增删查改操作
 */
public class JdbcTemplate<T> {
	
	static Connection conn = null;
	static PreparedStatement pstm = null;
	static ResultSet rs = null;
	
	/*
	 * 查询方法
	 * 查询结果1条T queryForObject(sql,object..args,RowMapper rm)
	 * 查询结果多条List<T> queryForList(sql,object...args,RowMapper rm);
	 */
	
	public T queryForObject(String sql,RowMapper<T> rm,Object...args){
		T t = null;
		try {
			conn = JdbcUtil3.getConnection();
			pstm = conn.prepareStatement(sql);
			if(args.length!=0){
				for(int i=0;i<args.length;i++){
					pstm.setObject(i+1, args[i]);
				}
			}
			rs = pstm.executeQuery();
			if(rs.next()){
				t = rm.mappreRow(rs);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println("数据库链接出现问题");
		}finally{
			try {
				JdbcUtil3.release(rs, pstm, conn);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				System.out.println("释放资源出现问题");
			}
		}
		return t;
	}
	
	//查询多条
	public List<T> queryForList(String sql, RowMapper<T> rm, Object...args){
		List<T>  list = null;
		try {
			conn = JdbcUtil3.getConnection();
			pstm = conn.prepareStatement(sql);
			if(args.length!=0){
				for(int i=0;i<args.length;i++){
					pstm.setObject(i+1, args[i]);
				}
			}
			rs = pstm.executeQuery();
			list = new ArrayList();
			while(rs.next()){
				T t = rm.mappreRow(rs);
				list.add(t);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println("数据库链接出现问题");
		}finally{
			try {
				JdbcUtil3.release(rs, pstm, conn);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				System.out.println("释放资源出现问题");
			}
		}
		return list;	
	}
	
	
	/* 
	 * 操作方法
	 * void update(sql, object...args)
	 */
	
	//更改操作
	public void update(String sql,Object...args){
		try {
			conn = JdbcUtil3.getConnection();
			System.out.println("template:"+conn);
			pstm = conn.prepareStatement(sql);
			//args的长度如果不是0,说明有参数,有参数就说明sql是个半成品
			if(args.length!=0){
				for(int i=0;i<args.length;i++){
					pstm.setObject(i+1, args[i]);
				}
			}
			pstm.executeUpdate();
		} catch (Exception e) {
			System.out.println("数据库发生异常");
		}finally{
			try{
				JdbcUtil3.release(null, pstm, conn);
			} catch (Exception e){
				System.out.println("释放资源出现问题");
			}
		}
	}
}
相关标签: # JDBC jdbc java