import java.sql.*;
import javax.naming.*;
import javax.sql.DataSource;
/**
* This example shows how to programmatically get and directly use
* an unpooled DataSource
*/
public final class UseJndiDataSource
{
public static void main(String[] argv)
{
try
{
// let a command line arg specify the name we will
// lookup our DataSource.
String jndiName = argv[0];
// Create an InitialContext, and lookup the DataSource 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();
// acquire the DataSource... this is the only c3p0 specific code here
DataSource ds = (DataSource) ctx.lookup( jndiName );
// get hold of a Connection an do stuff, in the usual way
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try
{
con = ds.getConnection();
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT * FROM foo");
while (rs.next())
System.out.println( rs.getString(1) );
}
finally
{
// i try to be neurotic about ResourceManagement,
// explicitly closing each resource
// but if you are in the habit of only closing
// parent resources (e.g. the Connection) and
// letting them close their children, all
// c3p0 DataSources will properly deal.
attemptClose(rs);
attemptClose(stmt);
attemptClose(con);
}
}
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 UseJndiDataSource()
{}
}
C3p0是一个开源的Java数据库连接池,全称为com.mchange.v2.c3p0,它由MChange Software公司开发。这个"C3p0-0.9.1.2.jar"是c3p0的一个特定版本,版本号为0.9.1.2,包含了该版本的所有功能和修复的已知问题。数据库连接池是一种优化数据库访问性能的技术,通过复用已建立的数据库连接,避免频繁创建和销毁连接,从而提高了应用的效率并减少了数据库系统的负载。 C3p0的主要功能包括: 1. **连接池管理**:创建并维护一定数量的数据库连接,供应用程序动态使用。当连接空闲时,会自动回收并进行必要的维护,如检查连接是否有效,避免因长时间未使用导致的连接失效。 2. **自动扩展**:在连接池中的连接被全部占用时,C3p0可以自动创建新的连接以满足需求,同时设定最大连接数限制,防止资源过度消耗。 3. **连接测试**:在提供给应用程序使用之前,C3p0可以对连接进行测试,确保其可用性,避免因无效连接导致的问题。 4. **配置灵活性**:C3p0允许用户通过配置文件(如c3p0.properties)或代码方式设置各种参数,如初始化连接数、最小空闲连接数、最大连接数、超时时间等,以适应不同应用场景的需求。 5. **异常处理**:当数据库连接出现问题时,C3p0能自动捕获并处理异常,提供了一定的容错能力。 6. **源码开放**:这个版本的c3p0库包含了源码,开发者可以深入理解其工作原理,方便定制和调试。 7. **JDBC兼容**:C3p0作为数据库连接池,与JDBC标准兼容,可以轻松地集成到任何使用JDBC的Java项目中。 为了使用C3p0,你需要在项目中引入"C3p0-0.9.1.2.jar",然后配置c3p0的相关属性,例如在Spring框架中,可以在`context.xml`中添加如下配置: ```xml <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydb"/> <property name="user" value="root"/> <property name="password" value="password"/> <!-- 更多配置参数 --> </bean> ``` 配置完成后,就可以在你的Java代码中通过`@Autowired`或`lookup`数据源来使用c3p0提供的数据库连接了。 C3p0是一个强大的数据库连接池实现,提供了丰富的配置选项和健壮的异常处理机制,对于任何基于JDBC的Java应用来说,都是一个值得考虑的性能优化工具。通过研究其源码,开发者还可以更好地理解和定制其行为,以适应项目的特殊需求。


















































































































- 1
- 2
- 3

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整

- 粉丝: 20
- 资源: 15
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 一个雷达检测运动目标的 matlab代码.rar
- LabVIEW实现Delta台达PLC ModbusTCP协议的高效网口通讯方案
- 用MATLAB深度学习进行雷达辐射源信号分选识别 matlab代码.rar
- 一括等离子体和地狱等颜色图matlab代码.rar
- 用SC译码算法进行极化码的解码Matlab代码.rar
- 用动力学蒙特卡罗方法求解简单的一维含时线性化声子输运问题Matlab代码.rar
- 用于反应粒子跟踪的循环稀疏搜索和域分解算法matlab代码.rar
- 用于生成多晶材料二维横截面的有限元网格,用于晶间和穿晶断裂力学模拟 matlab代码.rar
- 用于在Matlab中执行基因集富集分析的工具箱(包括集成富集).rar
- 用于极化敏感阵列相干目标空间谱估计的源程序,修正的极化平滑 MUSIC 算法matlab代码.rar
- 阵列天线的波束形成以及极化特性,对阵列天线研究人员有一定的参考价值 matlab代码.rar
- 在X,y方向分别放水平磁环,在Z轴上放电偶极子,给出信号方位角估计随极化角度和俯仰角的变化的估计性能 matlab代码.rar
- AutoWareAuto框架深度解析:自动驾驶关键技术模块详解及其应用
- 超声波焊接电源(2600W)硬件与软件设计方案详解及其应用场景
- 基于Matlab的风光火储与电动汽车协同的微电网经济调度建模与优化
- MATLAB卡尔曼滤波程序.7z


