Java数据库连接工具类

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;


public class JDBCUtils {

	private JDBCUtils() {
	}
	
	private static ? dataSource = null;
	
	private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
	
	static {
		dataSource = ? ;
	}
	
	public static DataSource getDataSource(){
		return dataSource;
	}
	
	public static Connection getConnection(){
		Connection conn = tl.get();
		try {
			if(conn == null){
				conn = dataSource.getConnection();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		tl.set(conn);
		return conn;
	}
	
	/**
	 * 开始事务
	 */
	public static void startTransaction(){
		Connection conn = getConnection();
		try {
			conn.setAutoCommit(false);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 回滚事务
	 */
	public static void rollback(){
		Connection conn = getConnection();
		try {
			conn.rollback();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	
	/**
	 * 提交事务
	 */
	public static void commit(){
		Connection conn = getConnection();
		try {
			conn.commit();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 关闭Connection,并移除线程中的连接
	 */
	public static void closeConnection(){
		close(getConnection());
		tl.remove();
	}
	
	public static void close(Connection conn){
		try {
			if(conn != null){
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static void close(Statement stm){
		try {
			if(stm != null){
				stm.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static void close(ResultSet rs){
		try {
			if(rs != null){
				rs.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static void close(Connection conn,Statement stm,ResultSet rs) {
		try {
			if(rs != null){
				rs.close();
			}
			if(stm != null){
				stm.close();
			}
			if(conn != null){
				conn.close();
			}
			tl.remove();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

Druid 连接池 配置 (java无框架)

    /** 默认配置文件名 */
	public static String confile = "druid.properties";
	/** 配置文件 */
	public static Properties p = null;
	/** 唯一dateSource,保证全局只有一个数据库连接池 */
	public static DataSource dataSource = null;

	static {
		p = new Properties();
		InputStream inputStream = null;
		try {
			// java应用 读取配置文件
			inputStream = DBPoolHelper.class.getClassLoader().getResourceAsStream(confile);
			p.load(inputStream);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (inputStream != null) {
					inputStream.close();
				}
			} catch (IOException e) {
				// ignore
			}
		} // end finally
        
        try {
            //通过工厂类获取DataSource对象
            dataSource = DruidDataSourceFactory.createDataSource(p);
        } catch (Exception e) {
            logger.error("获取连接异常 ", e);
        }
        
    }

druid.properties

	driverClassName=com.mysql.jdbc.Driver
	url=jdbc:mysql://127.0.0.1:3306/数据库?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&useSSL=false&serverTimezone=GMT%2B8
	username=root
	password=
	
	
	#配置参数,让ConfigFilter解密密码
	#connectionProperties=config.decrypt=true;config.decrypt.key=xxxx
	
	#监控统计拦截的filters
	filters=stat
	
	#初始化时建立物理连接的个数,初始化发生在显示调用init方法,或者第一次getConnection时
	initialSize=1
	#最大连接池数量
	maxActive=10
	#最小连接池数量
	minIdle:1
	#获取连接等待超时的时间,单位毫秒
	maxWait=60000
	
	#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
	#有两个含义:1) Destroy线程会检测连接的间隔时间  2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
	timeBetweenEvictionRunsMillis=60000
	#一个连接在池中最小生存的时间,单位是毫秒
	minEvictableIdleTimeMillis=300000
	
	#用来检测连接是否有效
	validationQuery=SELECT 1
	#申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效
	testWhileIdle=true
	#申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
	testOnBorrow=false
	#归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
	testOnReturn=false
	
	#是否缓存preparedStatement,也就是PSCache
	poolPreparedStatements=true
	
	maxPoolPreparedStatementPerConnectionSize=200

参考:http://weikeqin.cn/2017/10/16/druid-db-pool-config-java/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值