第一步:创建一个JavaWeb工程,工程名为DBConnPrjTest(此工程名是变量)
第二步:在DBConnPrjTest\WebRoot\WEB-INF\lib下,加入以下包,并加载到工程中:
- commons-logging-1.1.1.jar
- ojdbc14.jar:oracle数据库的jdbc驱动包
- proxool-0.9.1.jar:目前市面上三个主流连接池从性能上排名如下:proxool>c3p0>dbcp,proxool还提供了可视化的连接池实时监控工具,所以既稳定又方便,配置也是非常容易的事情
- proxool-cglib.jar
- 可以从http://proxool.sourceforge.net/站点上下载我们需要的资源,proxool-0.9.1是最新版本,解压后从lib下copy里面的2个JAR包 proxool-0.9.1.jar和 proxool-cglib.jar至项目中的DBConnPrjTest\WebRoot\WEB-INF\lib目录下。如果不加proxool-cglib.jar的话会报 java.lang.ClassNotFoundException:org.logicalcobwebs.cglib.proxy.Callback异
第三步:在DBConnPrjTest\src\conf下,创建以下两个配置文件:
- DBConfig.properties:用于普通方式获取数据库连接
- proxool.xml:用于数据源方式获取数据库连接
DBConfig.properties
driver=oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@db_ip:db_port:db_sid user=db_username password=db_password
proxool.xml
<?xml version="1.0" encoding="UTF-8"?> <myPool> <proxool> <!--数据源的别名--> <alias>DataSource</alias> <!--url连接串--> <driver-url>jdbc:oracle:thin:@192.168.2.36:1521:orcl</driver-url> <!--驱动类--> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <!-- 驱动属性 --> <driver-properties> <!-- 用户名 --> <property name="user" value="cms" /> <!-- 密码 --> <property name="password" value="temobi" /> </driver-properties> <!-- 允许最大连接数(默认5个),超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定--> <maximum-connection-count>60</maximum-connection-count> <!-- 最小连接数(默认2个)--> <minimum-connection-count>5</minimum-connection-count> <!--proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒--> <house-keeping-sleep-time>120000</house-keeping-sleep-time> <!--用于保持连接的测试语句 --> <house-keeping-test-sql>select 1 from dual</house-keeping-test-sql> <!--没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受--> <!-- 以下配置已经不推荐使用了,用simultaneous-build-throttle代替 --> <!-- <maximum-new-connections>10</maximum-new-connections> --> <!-- 某一时间点的最大连接数数--> <simultaneous-build-throttle>50</simultaneous-build-throttle> <!--最少保持的空闲连接数(默认2个)--> <prototype-count>0</prototype-count> <!--在使用之前测试--> <test-before-use>true</test-before-use> <!-- 连接最大生命时间 默认4小时 单位:秒--> <maximum-connection-lifetime>600000</maximum-connection-lifetime> <!-- 连接最大时间活动 默认5分钟 单位:秒--> <maximum-active-time>600000</maximum-active-time> </proxool> </myPool>
第四步:创建java类:
- 在DBConnPrjTest\src\com\jdbc下,创建ConnectionUtil.java
- 在DBConnPrjTest\src\com\proxool下,创建ConnectionManager.java,ConnectionTool.java,DBResourceHelper.java
ConnectionUtil.java
/*
* 文 件 名: ConnectionUtil.java
* 描 述: 普通方式的数据库连接工具类
* 修 改 人: Administrator
*/
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
/**
* 数据库连接工具类
* @author Administrator
*/
public class ConnectionUtil
{
/**
* 写死数据库连接的相关信息,从而获取连接
*/
public Connection getConnection()
{
Connection conn = null;
try
{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager
.getConnection("jdbc:mysql://localhost:3306/jdbc_db",
"root", "mysqladmin");
return conn;
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
/**
* 通过传参的方式获取数据库连接
* @param driver 数据库驱动类型
* @param url 数据库连接字符串
* @param user 数据库用户
* @param password 数据库密码
*/
public Connection getConnection(String driver, String url, String user,
String password)
{
Connection conn = null;
try
{
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
return conn;
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
/**
* 通过读取properties文件配置信息,来获取数据库连接
*/
public Connection openConnection()
{
String driver = "";
String url = "";
String user = "";
String password = "";
//Properties 类表示了一个持久的属性集。
//Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。
Properties prop = new Properties();
Connection conn = null;
try
{
//将DBConfig.properties文件的属性列表输出到指定的输出流
prop.load(this.getClass().getClassLoader().getResourceAsStream(
"conf/DBConfig.properties"));
driver = prop.getProperty("driver");
url = prop.getProperty("url");
user = prop.getProperty("user");
password = prop.getProperty("password");
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
return conn;
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
public static void main(String[] args)
{
ConnectionUtil cu = new ConnectionUtil();
System.out.println("数据库连接: "+ cu.openConnection());
}
}
ConnectionManager.java
/*
* 文 件 名: ConnectionManager.java
* 描 述: 连接池方式的数据库连接管理类
* 修 改 人: Administrator
*/
package com.proxool;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.logicalcobwebs.proxool.ProxoolDataSource;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;
/**
* 数据库连接管理类
*
* @author Administrator
*/
public class ConnectionManager
{
private static final String ALIAS = "DataSource";
private static ProxoolDataSource cmsds = null;
static
{
initDataSource();
}
/**
* 初始化数据源
*/
private static boolean initDataSource()
{
InputStreamReader reader = null;
try
{
// 实例化一个File对象
File proxoolFile = new File(
"E:/workspace/DBConnPrjTest/src/conf/proxool.xml");
if (proxoolFile.exists())
{
reader = new InputStreamReader(new FileInputStream(proxoolFile));
}
else
{
reader = new InputStreamReader(
Thread
.currentThread()
.getContextClassLoader()
.getResourceAsStream(
"E:/workspace/DBConnPrjTest/src/conf/proxool.xml"));
}
// Java应用中先要加载配置文件,否则谁知道你配置给谁用的
JAXPConfigurator.configure(reader, false);
// 要据proxool中的数据源别名,实例化一个数据源对象
cmsds = new ProxoolDataSource(ALIAS);
return true;
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
finally
{
if (reader != null)
{
try
{
reader.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
/**
* 取连接
*/
public static Connection getConnection1()
{
if (cmsds == null)
{
return null;
}
try
{
return cmsds.getConnection();
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
public static Connection getConnection2()
{
Connection conn = null;
try
{
// Java应用中先要加载配置文件,否则谁知道你配置给谁用的
JAXPConfigurator.configure(
"E:/workspace/DBConnPrjTest/src/conf/proxool.xml", false);
// 1:注册驱动类,这次这个驱动已经不是Oracle的驱动了,是Proxool专用的驱动
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
// 2:创建数据库连接,这个参数是一个字符串,是数据源的别名,在配置文件中配置的DataSource,参数格式为:proxool.数据源的别名
conn = DriverManager.getConnection("proxool.DataSource");
}
catch (ProxoolException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void main(String[] args)
{
try
{
// System.out.println(cmsds);
// System.out.println("连接:" + cmsds.getConnection());
// System.out.println(ConnectionManager.getConnection1());
// ProxoolFacade.shutdown();
System.out.println(ConnectionManager.getConnection2());
// ProxoolFacade.shutdown();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
ConnectionTool.java
/*
* 文 件 名: ConnectionTool.java
* 描 述: 连接池方式的数据库连接工具类
* 修 改 人: Administrator
*/
package com.proxool;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;
/**
* 数据库连接工具类
* @author Administrator
*/
public class ConnectionTool
{
public static Connection getConnection()
{
Connection conn = null;
try
{
// Java应用中先要加载配置文件,否则谁知道你配置给谁用的
JAXPConfigurator.configure(
"E:/workspace/DBConnPrjTest/src/conf/proxool.xml", false);
// 1:注册驱动类,这次这个驱动已经不是Oracle的驱动了,是Proxool专用的驱动
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
// 2:创建数据库连接,这个参数是一个字符串,是数据源的别名,在配置文件中配置的DataSource,参数格式为:proxool.数据源的别名
conn = DriverManager.getConnection("proxool.DataSource");
}
catch (ProxoolException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void main(String[] args)
{
System.out.println(ConnectionTool.getConnection());
}
}
DBResourceHelper.java
/*
* 文 件 名: DBResourceHelper.java
* 描 述: 数据库资源的帮助类
* 修 改 人: Administrator
*/
package com.proxool;
import java.sql.*;
/**
* 关闭数据库资源
*
* @author Administrator
*/
public class DBResourceHelper
{
private DBResourceHelper()
{
}
/**
* 关闭连接
*/
static public void closeConnection(Connection conn)
{
if (conn != null)
{
try
{
conn.close();
}
catch (Exception e)
{
}
}
}
/**
* 关闭执行静态 SQL 语句所生成的结果对象
*/
static public void closeStatement(Statement stat)
{
if (stat != null)
{
try
{
stat.close();
}
catch (Exception e)
{
}
}
}
/**
* 关闭结果集对象
*/
static public void closeResultSet(ResultSet rs)
{
if (rs != null)
{
try
{
rs.close();
}
catch (Exception e)
{
}
}
}
/**
* 回滚
*/
static public void rollbackConnection(Connection conn)
{
if (conn != null)
{
try
{
conn.rollback();
}
catch (Exception e)
{
}
}
}
/**
* 自动提交
*/
static public void setConnectionAutoCommit(Connection conn,
boolean autoCommit)
{
if (conn != null)
{
try
{
conn.setAutoCommit(autoCommit);
}
catch (Exception e)
{
}
}
}
}