先看官网给的范例:
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!");
}