jdbc工具源码

连接管理类:

package com.bai.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 
 * <p>Title: ConnectionManager</p>   
 * <p>Description:连接管理 </p>  
 * @author 白永程  
 * @date 2018年6月15日
 */
public class ConnectionManager {
	//创建本地线程对象
	private static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>();
	//数据库信息
	private static String driverName = PropertiesResolver.getValue("db_driver");
	private static String url = PropertiesResolver.getValue("db_url");
	private static String name = PropertiesResolver.getValue("db_name");
	private static String password = PropertiesResolver.getValue("db_password");
	//驱动加载
	static{
		try {
			Class.forName(driverName);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	//创建连接(限制子类访问)
	protected static Connection getConnection(){
		//从线程对象获取线程
		Connection connection = threadLocal.get();
		//判断线程对象是否存在连接
		if(connection==null){
			try {
				//先创建连接对象
				connection = DriverManager.getConnection(url, name, password);
				//向线程对象添加连接
				threadLocal.set(connection);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return connection;
	}
	//关闭资源(限制子类访问)
	protected static void closeObject(Object...paras){
		try{
			if(paras.length>0){
				for(Object para:paras){
					//判断对象类型,按类型关闭资源
					if(para instanceof ResultSet){
						((ResultSet) para).close();
					}
					if(para instanceof PreparedStatement){
						((PreparedStatement) para).close();
					}
					if(para instanceof Connection){
						Connection conn  =(Connection) para;
						//判断连接状态
						if(!conn.isClosed()){
							conn.close();
							conn = null;//提升废弃连接的gc回收效率
						}
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

配置文件解析类:

package com.bai.jdbc;

import java.util.ResourceBundle;

/**
 * 
 * <p>Title: PropertiesResolver</p>   
 * <p>Description:properties解析类 </p>  
 * @author 白永程  
 * @date 2018年6月15日
 */
public class PropertiesResolver {
	//声明properties文件读取器
	private static ResourceBundle bundle;
	
	static{
		bundle = ResourceBundle.getBundle("jdbc");
	}
	//获取properties文件属性值
	public static String getValue(String key){
		return bundle.getString(key);
	}
	
}

配置文件jdbc.properties:

db_url=jdbc:mysql://localhost:3306/woniu_auth
db_name=root
db_password=root
db_driver=com.mysql.jdbc.Driver

工具类:

package com.bai.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 
 * <p>Title: JDBCUtil</p>   
 * <p>Description:jdbc工具类 </p>  
 * @author 白永程  
 * @date 2018年6月15日
 */
public class JDBCUtil extends ConnectionManager{
	//执行增、删、改的工具
	public static int executeUpdate(String sql,Object...paras){
		int row = -1;
		//获取连接
		Connection conn = getConnection();
		//定义预编译对象句柄
		PreparedStatement pst = null;
		try {
			//通过连接对象创建预编译对象
			pst = conn.prepareStatement(sql);
			//处理预编译sql数据填充
			if(paras.length>0){
				for(int i = 0;i<paras.length;i++){
					pst.setObject(i+1, paras[i]);
				}
			}
			//预编译对象执行更新语句
			row = pst.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			ConnectionManager.closeObject(conn,pst);
		}
		return row;
	}
	//执行查询的工具
	public static List<Map<String,Object>> executeQuery(String sql,Object...paras){
		//声明返回数据集句柄
		List<Map<String,Object>> result = null;
		//获取连接
		Connection conn = ConnectionManager.getConnection();
		//定义预编译对象句柄
		PreparedStatement pst = null;
		ResultSet rs = null;
		try {
			//通过连接对象创建预编译对象
			pst = conn.prepareStatement(sql);
			//处理预编译sql数据填充
			if(paras.length>0){
				for(int i = 0;i<paras.length;i++){
					pst.setObject(i+1, paras[i]);
				}
			}
			//预编译对象执行查询语句获取结果集
			rs = pst.executeQuery();
			//为了不暴露ResultSet(暴露ResultSet可能会暴露connection信息)
			if(rs != null){
				//新建结果集合
				result = new ArrayList<Map<String,Object>>();
				//获取结果集中的元数据对象
				ResultSetMetaData rsd = rs.getMetaData();
				//获取总列数
				int columnCount = rsd.getColumnCount();
				while(rs.next()){
					//定义存储结果的集合
					Map<String,Object> map = new HashMap<String, Object>();
					//遍历每一行数据
					for(int i=0;i<columnCount;i++){
						//获取列名
						String columnName = rsd.getColumnName(i+1);
						//获取字段值
						Object obj = rs.getObject(columnName);
						//存入map
						map.put(columnName, obj);
					}
					//放入结合集合
					result.add(map);
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			closeObject(conn,pst,rs);
		}
		return result;
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值