介绍了和Java,有关的知识、技巧、经验,和一些java源码等。自己还没完全理解,第一次用,但是代码可以用了,放上来,要不到时又不知丢那去,找不着了。代码中用的数据库连接,根据不同的数据库,应该把不同的驱动加到
工程里,这里用的是postgresql,可以到postgresql官网下载JAVA驱动包,最新的好象是8.1的。
- import java.sql.Connection;
- import java.sql.SQLException;
- import java.sql.DriverManager;
- import org.apache.log4j.Logger;
- import org.apache.commons.pool.ObjectPool;
- import org.apache.commons.pool.impl.GenericObjectPool;
- import org.apache.commons.dbcp.DriverManagerConnectionFactory;
- import org.apache.commons.dbcp.ConnectionFactory;
- import org.apache.commons.dbcp.PoolableConnectionFactory;
- import org.apache.commons.dbcp.PoolingDriver;
- /**
- * ݿ<a href="http://lib.csdn.net/base/mysql" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>数据库</a>连接缓冲池
- */
- public class DBPool {
- private final static Logger logger = Logger.getLogger(DBPool.class);
- private static String dbIP = "192.168.0.132";
- private static String dbJdbc = "jdbc:postgresql://" + dbIP + "/sample";
- private static String dbUser = "sample";
- private static String dbPwd = "sample";
- private static Class driverClass = null;
- private static ObjectPool connectionPool = null;
- public DBPool() {
- }
- /**
- * 初始化数据源
- */
- private static synchronized void initDataSource() {
- //驱动数据源
- if (driverClass == null) {
- try {
- driverClass = Class.forName("org.postgresql.Driver");
- } catch (ClassNotFoundException e) {
- logger.error(e.getMessage(), e);
- }
- }
- }
- /**
- * 连接池启动
- * @throws Exception
- */
- public static void StartPool() {
- // 记录连接源的字符串
- logger.info(dbJdbc);
- // 初始化数据源
- initDataSource();
- // 如果连接池为空
- if (connectionPool != null) {
- ShutdownPool();
- }
- try {
- connectionPool = new GenericObjectPool(null);
- ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(
- dbJdbc, dbUser, dbPwd);
- PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(
- connectionFactory, connectionPool, null, null, false, true);
- Class.forName("org.apache.commons.dbcp.PoolingDriver");
- PoolingDriver driver = (PoolingDriver) DriverManager
- .getDriver("jdbc:apache:commons:dbcp:");
- driver.registerPool("dbpool", connectionPool);
- logger.info("Init Pool for Database Connection Succees.");
- } catch (Exception e) {
- logger.error(e.getMessage(), e);
- }
- }
- /**
- * 释放连接池
- */
- public static void ShutdownPool() {
- try {
- PoolingDriver driver = (PoolingDriver) DriverManager
- .getDriver("jdbc:apache:commons:dbcp:");
- driver.closePool("dbpool");
- } catch (SQLException e) {
- logger.error(e.getMessage(), e);
- }
- }
- /**
- * 打印连接池状态
- */
- public static String GetPoolStats() {
- StringBuffer stat = new StringBuffer();
- try {
- PoolingDriver driver = (PoolingDriver) DriverManager
- .getDriver("jdbc:apache:commons:dbcp:");
- ObjectPool connectionPool = driver.getConnectionPool("dbpool");
- stat.append("-- Active Connection: ");
- stat.append(connectionPool.getNumActive());
- stat.append(" ,");
- stat.append("Free Connection: ");
- stat.append(connectionPool.getNumIdle());
- stat.append(" . --");
- } catch (Exception e) {
- logger.error(e.getMessage(), e);
- }
- return stat.toString();
- }
- /**
- * 取得连接池中的连接
- * @return
- */
- public static Connection getDbConnection() {
- Connection conn = null;
- if(connectionPool == null)
- StartPool();
- try {
- conn = DriverManager
- .getConnection("jdbc:apache:commons:dbcp:dbpool");
- } catch (SQLException e) {
- logger.error(e.getMessage(), e);
- }
- return conn;
- }
- }