您的位置:首页 > 数据库

自定义数据库连接工具类

2017-11-09 00:11 190 查看
这是一个代码质量比较高的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());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 工具类