import org.apache.commons.pool.ObjectPool;
import org.apache.commons.pool.impl.GenericObjectPool;
import org.apache.commons.dbcp.ConnectionFactory;
import org.apache.commons.dbcp.PoolingDriver;
import org.apache.commons.dbcp.PoolableConnectionFactory;
import org.apache.commons.dbcp.DriverManagerConnectionFactory;
import java.sql.*;
public class DBConn {
private Connection conn = null;
private Statement stmt = null;
private static String sqlJdbc = "";
private static String sqlUser = "";
private static String sqlPwd = "";
private static Class driverClass=null;
private static ObjectPool connectionPool=null;
public DBConn() {
if("".equals(sqlJdbc)){
sqlJdbc = "jdbc:mysql://192.168.1.117:3306/test";
//sqlserver: jdbc:microsoft:sqlserver://IP;DatabaseName=lordeDAS
//oracle: jdbc:oracle:thin:@ip:1521:myordb
}
if("".equals(sqlUser)){
sqlUser = "root";
}
if("".equals(sqlPwd)){
sqlPwd = "";
}
initDataSource();
}
public synchronized static void initDataSource(){
if(driverClass==null){
try {
//oracle: oracle.jdbc.driver.OracleDriver
//sqlserver: com.microsoft.jdbc.sqlserver.SQLServerDriver
driverClass=Class.forName("org.gjt.mm.mysql.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
if(connectionPool==null){
try {
setupDriver(sqlJdbc);
} catch (Exception e) {
e.printStackTrace();
}
}
// Display some pool statistics
try {
printDriverStats();
} catch (Exception e) {
e.printStackTrace();
}
}
//获取一个连接
private Connection getDbPollConnection(){
try {
conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:auxdbpoll");
} catch(SQLException e) {
e.printStackTrace();
}
return conn;
}
// 获得记录集
public ResultSet executeQuery(String SQL) {
try {
stmt=getDbPollConnection().createStatement();
ResultSet rs = stmt.executeQuery(SQL);
return rs;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
// 执行SQL
public boolean execute(String SQL) {
try {
stmt=getDbPollConnection().createStatement();
stmt.execute(SQL);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}finally{
close();
}
}
// 执行SQL
public boolean executeUpdate(String SQL) {
try {
stmt=getDbPollConnection().createStatement();
stmt.executeUpdate(SQL);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}finally{
close();
}
}
public void close(){
if(stmt!=null){
try{
stmt.close();
stmt=null;
}catch(Exception e){
System.out.println(e);
}
}
if(conn!=null){
try{
conn.close();
conn=null;
}catch(Exception e){
System.out.println(e);
}
}
}
public static void printDriverStats() throws Exception {
PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:");
ObjectPool connectionPool = driver.getConnectionPool("auxdbpoll");
System.out.println("活动的连接: " + connectionPool.getNumActive());
System.out.println("空闲的连接: " + connectionPool.getNumIdle());
}
public static void shutdownDriver() throws Exception {
PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:");
driver.closePool("auxdbpoll");
}
public static void setupDriver(String connectURI) throws Exception {
System.out.println(connectURI);
connectionPool = new GenericObjectPool(null);
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(connectURI,sqlUser,sqlPwd);
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("auxdbpoll",connectionPool);
}
//测试
public void testQuery(){
String sql="select * from table_user";
try {
ResultSet rs=executeQuery(sql);
while(rs.next()){
System.out.println(rs.getString("user"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
close();
}
}
public static void main(String[] args){
DBConn dbConn=new DBConn();
dbConn.testQuery();
}
}
分享到:
相关推荐
**DBCP连接数据库的核心概念:** 1. **连接池**:DBCP连接池的核心思想是复用数据库连接,减少创建和关闭数据库连接的开销。在系统启动时,连接池预先创建一定数量的数据库连接,这些连接在空闲时等待任务,当需要...
DBCP(Database Connection Pool)是Apache软件基金会的Commons项目中的一个组件,它提供了一个数据库连接池服务。数据库连接池在应用服务器启动时创建一定数量的数据库连接,并将这些连接放入池中,当应用程序需要...
DBCP连接池主要由两个组件组成,它们是`commons-dbcp`和`commons-pool`。`commons-dbcp`包含与数据库交互的核心功能,如创建、管理和维护数据库连接,而`commons-pool`则是一个通用的对象池库,为DBCP提供连接对象的...
使用DBCP连接数据库的基本步骤如下: 1. 添加依赖:将`commons-dbcp.jar`和`commons-pool.jar`添加到项目的类路径中。 2. 创建配置:设置数据库连接池的配置属性,如最大连接数、最小连接数、超时时间等,通常这些...
1. **DataSource**:这是JDBC中定义的一个接口,代表了数据源,是连接数据库的工厂。在DBCP中,可以通过配置来创建一个DataSource实例,然后通过它获取到数据库连接。 2. **BasicDataSource**:这是DBCP提供的具体...
DBCP,全称为Jakarta-Commons-DBCP,是一个基于Apache组织开发的开源数据库连接池组件。在Java应用程序中,DBCP可以帮助管理和优化数据库连接,提高应用性能和资源利用率。数据库连接池在多线程环境下尤其重要,因为...
4. **连接管理**:DBCP连接池会监控连接的状态,如果发现某个连接已经超时或者出现异常,会自动进行回收或重新建立,确保连接池中的连接始终处于可用状态。 5. **配置参数**:DBCP允许开发者通过配置参数来调整连接...
总的来说,JDBC是连接数据库的基础,而DBCP则是优化数据库访问的一种手段。结合使用JDBC和DBCP,开发者可以在Java应用中实现高效且易于管理的数据库连接。在实际开发中,理解并掌握这些技术对于构建健壮的数据库应用...
DBCP(Database Connection Pool)是Apache Commons项目中的一个数据库连接池组件,主要目的是为了提高数据库连接的复用性,减少创建和销毁连接的开销,从而提升应用的性能。DBCP2是其第二个主要版本,提供了更稳定...
**数据库连接池(DBCP)** 是一个在Java应用程序中管理数据库连接的工具,它能够有效地提高数据库操作的性能和效率。DBCP全称为`Jakarta Commons DBCP`,是Apache软件基金会的一个项目,提供了对数据库连接的池化...
### common-dbcp2数据库连接池参数详解 随着`commons-dbcp2`的版本更新,数据库连接池的配置也有了相应的调整。为了更好地理解和配置这些参数,本文将详细解析`commons-dbcp2`中的一些关键参数及其意义。 #### 1. ...
DBCP(DataBase Connection Pool)是Apache组织开发的一个开源数据库连接池组件,它是Java应用程序中用于高效管理数据库连接的重要工具。数据库连接池的概念是基于资源复用的原理,它避免了频繁地创建和销毁数据库...
DBCP是基于Apache的Commons Pool对象池设计模式实现的,用于管理和复用数据库连接,减少创建和销毁数据库连接时的开销。 首先,我们需要理解数据库连接池的工作原理。数据库连接池在初始化时会创建一定数量的数据库...
配置DBCP连接池通常包括以下几个步骤: 1. **引入依赖**:将`commons-dbcp-1.2.jar`和`commons-pool.jar`添加到项目类路径中,这通常是通过Maven或Gradle等构建工具完成的。 2. **配置属性**:创建一个配置文件...
总之,DBCP是一个强大的数据库连接池实现,它通过Apache Commons Collections和Pool库的支持,为Java应用程序提供了高效的数据库连接管理。在Spring框架中整合DBCP,可以简化数据库连接的生命周期管理,提升应用性能...
DBCP(Database Connection Pool)是Apache软件基金会的一个开源项目,全称为Apache Commons DBCP,它是一个基于Java的数据库连接池实现。在Java应用程序中,DBCP被广泛用于管理数据库连接,以提高性能和资源利用率...
标题中提到的"jar包"是配置DBCP连接池的基础。你需要将`commons-dbcp.jar`和`commons-pool.jar`这两个JAR文件添加到你的项目类路径中。这两个库分别提供了数据库连接池的基本实现和对象池服务。现在在大多数情况下...
数据库连接池(Database Connection Pool,简称 DBCP)是一种在多用户并发环境下高效管理数据库连接的技术。它通过预先创建一定数量的数据库连接并存储在内存池中,供多个应用程序共享,从而避免了频繁地创建和关闭...
它通过预创建并管理一定数量的数据库连接,避免了每次连接数据库时的初始化开销,同时也能有效地复用这些连接,从而提高了数据库操作的效率。在Java中,Apache Commons DBCP 是一个常用的开源连接池实现。 这篇...
总的来说,DBCP和Commons Pool是Java应用中实现数据库连接池的重要工具,它们能够有效地管理数据库连接,提升应用的并发性能和资源利用率。在实际开发中,正确配置和使用这两个组件对于优化数据库操作和提高应用整体...