java常用连接池一----【DBCP连接池】

DBCP(DataBase connection pool),数据库连接池是java数据库连接池的一种,由Apache开发, tomcat 使用的连接池组件,通过数据库连接池,可以让程序自动管理数据库连接的释放和断开。

单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar

由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。


【DBCP连接池的使用

第一步:引入DBCP连接池的jar.

第二步:编写DBCP代码:

    * 手动设置参数:

    * 配置文件设置参数:


DBCP连接池的两种使用方式:

(手动方式和配置文件方式)

/**
 * 
 */
package com.dbcp;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import javax.imageio.stream.FileImageInputStream;
import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.junit.Test;

import com.jdbcutils.JDBCUtils;
import com.jdbcutils.JDBCUtils_ByFile;

/**
 * DBCP连接池的使用
 * 
 * @author 李 下午9:31:52
 */
public class DBCPDemo {
	/**
	 * 手动方式
	 */
	@Test
	public void demo1() {
		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		BasicDataSource dataSource = new BasicDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///stu");
		dataSource.setUsername("root");
		dataSource.setPassword("420420");
		try {
			conn = dataSource.getConnection();
			String sql = "select * from student";
			stmt = conn.prepareStatement(sql);
			rs = stmt.executeQuery();
			while (rs.next()) {
				System.out.println(rs.getInt("id") + "  "
						+ rs.getString("name"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtils_ByFile.closeConnection(rs, stmt, conn);
		}
	}

	/**
	 * 配置文件方式
	 */
	@Test
	public void demo2() {
		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;

		try {
			//设置相关参数
			Properties properties = new Properties();
			properties.load(new FileInputStream("src/dbcpconfig.properties"));
			DataSource dataSource = BasicDataSourceFactory
					.createDataSource(properties);
			conn = dataSource.getConnection();
			String sql = "select * from student";
			stmt = conn.prepareStatement(sql);
			rs = stmt.executeQuery();
			while (rs.next()) {
				System.out.println(rs.getInt("id") + "  "
						+ rs.getString("name"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			//该处为自定义的工具类,用来释放资源
			JDBCUtils_ByFile.closeConnection(rs, stmt, conn);
		}
	}
}



配置文件:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///stu
username=root
password=420420

工具类JDBCUtils:
/**
 * 
 */
package com.jdbcutils;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

/**
 * @author 李 下午7:29:53
 */
public class JDBCUtils_ByFile {
	private static final String driverClass;
	private static final String url;
	private static final String username;
	private static final String password;

	/**
	 * 读取配置文件
	 */
	static {
		Properties properties = null;
		try {
			InputStream in = new FileInputStream("src/jdbc.properties");
			properties = new Properties();
			properties.load(in);

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		driverClass = properties.getProperty("driverClass");
		url = properties.getProperty("url");
		username = properties.getProperty("username");
		password = properties.getProperty("password");
	}

	/**
	 * 加载驱动
	 */
	public static void loadDriver() {
		try {
			Class.forName(driverClass);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 连接数据库 并返回连接conn
	 * 
	 * @return
	 */
	public static Connection getConnection() {
		Connection conn = null;
		try {
			loadDriver();
			conn = DriverManager.getConnection(url, username, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return conn;
	}

	/**
	 * 释放资源
	 * 
	 * @param rs
	 *            结果集
	 * @param stmt
	 *            执行sql语句
	 * @param conn
	 *            连接
	 */
	public static void closeConnection(ResultSet rs, PreparedStatement stmt,
			Connection conn) {
		try {
			if (rs != null) {
				rs.close();
			}
			if (stmt != null) {
				stmt.close();
			}
			if (conn != null) {
				conn.close();
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 释放资源
	 * 
	 * @param stmt
	 *            执行sql语句
	 * @param conn
	 *            数据库连接
	 */
	public static void closeConnection(PreparedStatement stmt, Connection conn) {
		try {
			if (stmt != null) {
				stmt.close();
			}
			if (conn != null) {
				conn.close();
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值