java c3p0使用_Java中使用C3P0连接池

先看官网给的范例:

import java.sql.*;

import javax.naming.*;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.DataSources;

/**

* This example shows how to acquire a c3p0 DataSource and

* bind it to a JNDI name service.

*/

public final class JndiBindDataSource

{

// be sure to load your database driver class, either via

// Class.forName() [as shown below] or externally (e.g. by

// using -Djdbc.drivers when starting your JVM).

static

{

try

{ Class.forName( "com.mysql.jdbc.Driver" ); }

catch (Exception e)

{ e.printStackTrace(); }

}

public static void main(String[] argv)

{

try

{

// let a command line arg specify the name we will

// bind our DataSource to.

String jndiName = argv[0];

// acquire the DataSource using default pool params...

// this is the only c3p0 specific code here

DataSource unpooled = DataSources.unpooledDataSource("jdbc:mysql://127.0.0.1:3306/gpsdata",

"root",

"root");

DataSource pooled = DataSources.pooledDataSource( unpooled );

// Create an InitialContext, and bind the DataSource to it in

// the usual way.

//

// We are using the no-arg version of InitialContext's constructor,

// therefore, the jndi environment must be first set via a jndi.properties

// file, System properties, or by some other means.

InitialContext ctx = new InitialContext();

ctx.rebind( jndiName, pooled );

System.out.println("DataSource bound to nameservice under the name \"" +

jndiName + '\"');

}

catch (Exception e)

{ e.printStackTrace(); }

}

static void attemptClose(ResultSet o)

{

try

{ if (o != null) o.close();}

catch (Exception e)

{ e.printStackTrace();}

}

static void attemptClose(Statement o)

{

try

{ if (o != null) o.close();}

catch (Exception e)

{ e.printStackTrace();}

}

static void attemptClose(Connection o)

{

try

{ if (o != null) o.close();}

catch (Exception e)

{ e.printStackTrace();}

}

private JndiBindDataSource()

{}

}

这是一个JavaBean,在使用前应设置它的jdbcURL、user、password和driverClass。其他参数参考configuration properties

ComboPooledDataSource cpds =newComboPooledDataSource(); cpds.setDriverClass("org.postgresql.Driver");

cpds.setJdbcUrl( "jdbc:postgresql://localhost/testdb"); cpds.setUser("swaldman");

cpds.setPassword("test-password");

// 下面的设置是可选的,c3p0可以在默认条件下工作,也可以设置其他条件

cpds.setMinPoolSize(5);

cpds.setAcquireIncrement(5);

cpds.setMaxPoolSize(20);

也可以使用命名Configuration

ComboPooledDataSource cpds =newComboPooledDataSource("intergalactoApp");

com.mchange.v2.c3p0.DataSources 可以按照传统的JDBC驱动建立一个无连接池的DataSource,然后转化为连接池的DataSource。

DataSource ds_unpooled = DataSources.unpooledDataSource("jdbc:postgresql://localhost/testdb","swaldman","test-password");

DataSource ds_pooled = DataSources.pooledDataSource( ds_unpooled );

// 此时DataSource已经可以使用,但应该显示的设置driver Class

Class.forName("org.postgresql.Driver");

如果想设置其中的参数,可以将参数放入一个Map中

DataSource ds_unpooled = DataSources.unpooledDataSource("jdbc:postgresql://localhost/testdb","swaldman","test-password");

Map overrides = newHashMap();

overrides.put("maxStatements","200"); overrides.put("maxPoolSize",newInteger(50));

//建立一个包括默认值和设置值的PooledDataSource

ds_pooled = DataSources.pooledDataSource( ds_unpooled, overrides );

如果使用命名的Configuration,可以如下

ds_pooled = DataSources.pooledDataSource( ds_unpooled,"intergalactoAppConfig", overrides );

销毁DataSource有两种方式

DataSource.destroy()方式

DataSource ds_pooled =null;

try{

DataSource ds_unpooled = DataSources.unpooledDataSource("jdbc:postgresql://localhost/testdb","swaldman","test-password");

ds_pooled = DataSources.pooledDataSource( ds_unpooled );

// 下面正常使用DataSource...

}

finally{

DataSources.destroy( ds_pooled );

}

另一种是PooledDataSource 接口提供的close() 方法

staticvoidcleanup(DataSource ds)throwsSQLException {

// 确定是否为c3p0的PooledDataSource

if( dsinstanceofPooledDataSource) {

PooledDataSource pds = (PooledDataSource) ds;

pds.close();

} else

System.err.println("Not a c3p0 PooledDataSource!");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值