码迷,mamicode.com
首页 > 数据库 > 详细

自定义数据库连接工具类

时间:2017-11-09 11:46:29      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:数据库   工具类   

这是一个代码质量比较高的Util。这里写了两种,一种是原始的,一种是使用C3P0的。数据库使用的是MySQL5.7。

使用框架开发的时候根本不需要写这些东西。其实框架也是这样封装的,但提供的功能会很丰富。这里展现的是思路,供参考。

功能齐全的Dao工具类


DriverManager获取连接的Util:

package util;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class DBUtil {
	
	//连接URL
	private static String jdbcUrl;				
	//登录用户,配置文件中key不要命名为username或者userName,可能会出现冲突情况
	private static String userName;				
	//登录密码
	private static String password;		
	//实例化本地线程对象
	private static ThreadLocal<Connection> thread = new ThreadLocal<Connection>();
	
	static{
		try {
			//获取配置文件中的jdbc数据库连接信息
			Properties props = new Properties();
			props.load(DBUtil.class.getResourceAsStream("/conf/dbinfo.properties"));
			String driverClass = props.getProperty("driverClass");
			jdbcUrl = props.getProperty("jdbcUrl");
			userName = props.getProperty("user");
			password = props.getProperty("password");
			//加载驱动
			Class.forName(driverClass);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 获取数据库连接
	 * @return 数据库连接Connection对象
	 * @throws SQLException
	 */
	public static Connection getConnection() throws SQLException{
		
		if(thread.get() == null){
			Connection conn = DriverManager.getConnection(jdbcUrl, userName, password);
			thread.set(conn);
		}
		return thread.get();
		//不需要使用本地线程时,可以去掉上面代码
//		return DriverManager.getConnection(jdbcUrl, userName, password);
	}
	
	/**
	 * 关闭连接,释放资源
	 * @param conn Connection对象
	 * @param stmt Statement对象,可接收子类PreparedStatement对象
	 * @param rs ResultSet对象
	 */
	public static void closeAll(
			Connection conn,Statement stmt,ResultSet rs){
		
		if(rs != null){
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(stmt != null){
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(conn != null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		thread.remove();		//移除本地线程中的Connection对象
	}
	
	public static void main(String[] args) throws SQLException {
		System.out.println(getConnection());
	}
}

使用C3P0连接池的Util:

package com.sourong.util;

import java.beans.PropertyVetoException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * c3p0连接池工具类
 *
 */
public class C3p0DBUtil {
	
	//实例化c3p0连接池对象
	private static ComboPooledDataSource c3p0 = new ComboPooledDataSource();
	//实例化本地线程对象
	private static ThreadLocal<Connection> thread = new ThreadLocal<Connection>();
	
	static{
		//给c3p0配置参数
		try {
			Properties props = new Properties();
			props.load(C3p0DBUtil.class.getResourceAsStream("/dataSource.properties"));

			//设定数据库连接驱动类
			c3p0.setDriverClass(props.getProperty("driverClass"));
			//设定jdbc连接URL
			c3p0.setJdbcUrl(props.getProperty("jdbcUrl"));
			//设定连接登录用户名
			c3p0.setUser(props.getProperty("user"));
			//设定连接登录密码
			c3p0.setPassword(props.getProperty("password"));
			//设定当连接池中的连接耗尽的时候c3p0一次同时获取的连接数
			c3p0.setAcquireIncrement(Integer.valueOf(props.getProperty("acquireIncrement")));
			//设定初始化时获取十个连接,取值应在minPoolSize与maxPoolSize之间
			c3p0.setInitialPoolSize(Integer.valueOf(props.getProperty("initialPoolSize")));
			//设定连接池中保留的最小连接数
			c3p0.setMinPoolSize(Integer.valueOf(props.getProperty("minPoolSize")));
			//设定连接池中保留的最大连接数
			c3p0.setMaxPoolSize(Integer.valueOf(props.getProperty("maxPoolSize")));
		} catch (PropertyVetoException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 通过C3p0连接池,获取数据库连接
	 * @return 数据库连接Connection对象
	 * @throws SQLException
	 */
	public static Connection getConnection() throws SQLException{
		
		if(thread.get() == null){
			Connection conn = c3p0.getConnection();
			thread.set(conn);
		}
		return thread.get();
	}
	
	/**
	 * 关闭连接,释放资源
	 * @param conn Connection对象
	 * @param stmt Statement对象,可接收子类PreparedStatement对象
	 * @param rs ResultSet对象
	 */
	public static void closeAll(
			Connection conn,Statement stmt,ResultSet rs){
		
		if(rs != null){
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(stmt != null){
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(conn != null){
			try {
				conn.close();	//将连接对象放入连接池中,并标记为空闲
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		thread.remove();		//移除本地线程中的Connection对象
	}
	
	public static void main(String[] args) throws SQLException {
		System.out.println(getConnection());
	}
}


自定义数据库连接工具类

标签:数据库   工具类   

原文地址:http://one2thr.blog.51cto.com/6830522/1980139

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!