自定义数据库连接工具类

这是一个代码质量比较高的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());
	}
}
时间: 2025-01-06 11:55:23

自定义数据库连接工具类的相关文章

数据库连接工具类 数据库连接工具类——仅仅获得连接对象 ConnDB.java

package com.util; import java.sql.Connection; import java.sql.DriverManager; /** * 数据库连接工具类——仅仅获得连接对象 * */ public class ConnDB { private static Connection conn = null; private static final String DRIVER_NAME = "com.mysql.jdbc.Driver"; private st

数据库连接工具类——包含取得连接和关闭资源 ConnUtil.java

package com.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * @className: ConnUtil.java * @classDescription: 数据库连接工具类——包含取得连接和关闭资源 * @fun

使用配置文件的方式构建数据库连接工具类范例(DBCP)

dbcp.propertise内容: dirver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://数据库地址:3306/jdbctest username=root password=数据库密码 InitialSize=3 MaxTotal=5 MaxWaitMillis=3000 DBCPUtil.java package dbcptest; /** * 数据库连接工具类,每次调用会返回数据库连接对象 * 使用配置文件的方式方便更改数据库配置信息 * *

PHP 数据库连接工具类(MySQLI函数包装)

====================mysql===================== <?php class mysql { private $mysqli; private $result; /** * 数据库连接 * @param $config 配置数组 */ public function connect($config) { $host = $config['host']; //主机地址 $username = $config['username'];//用户名 $passwo

mysql数据库连接工具类C3P0

1 package com.dl.network_flow.db; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.sql.ResultSetMetaData; 7 import java.sql.SQLException; 8 import java.sql.Statement; 9 import java.sql.Ti

工具类之数据库工具类:DBUtil(采用反射机制)

经常操作数据库的码农们一定知道操作数据库是一项很复杂的工作,它不仅要解决各种乱码的问题还要解决各种数据表的增删改查等的操作. 另外每次操作数据库都要用到数据库连接.执行SQL语句.关闭连接的操作,所以在这里我就把这些功能封装到了一个工具类中,该类使用的是反射机制写成的,也就是说它可以帮助你完成对任何数据表的操作.关键代码如下: 首先是配置文件:config.properties driverName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost

mybatis自定义枚举转换类

mybatis提供了 EnumTypeHandler和EnumOrdinalTypeHandler完成枚举类型的转换,两者的功能已经基本满足了日常的使用.但是可能有这 样的需求:由于某种原因,我们不想使用枚举的name和ordinal作为数据存储字段.mybatis的自定义转换类出现了. 示例 使用一段代码,将枚举类EnumStatus中的code属性存储到数据库对应字段statusCustom. 自定义转换类 package com.sg.util.typehandler; import ja

面向对象中数据库操作类

具体实现功能: 1.连接数据库: 2.插入数据: 3.更新数据: 4.删除数据' 5.修改数据: 6.求最大值: 7.求最小值: 8.求平均数: 9.求和: 10.指定查询: 具体代码分为三个部分: 一.config文件:主要用于连接数据库 <?php return array( 'DB_HOST' => '127.0.0.1',   //主机 'DB_USER' => 'root', //用户名 'DB_PWD' => '123456', //密码 'DB_NAME' =>

EF Code First自定义数据库(服务器及数据库名)连接配置

EF Code First数据库连接配置 通过EF Code First创建新的数据库,默认的都是: 命名空间.Models.MovieDbContext之类的数据库文件,如果想用自定义的数据库名称,则可以用下面的方法: 1.1.首先必须建立好Model文件 Models中Movie.cs 1 using System; 2 using System.ComponentModel.DataAnnotations; 3 using System.Data.Entity; 4 5 namespace