c3p0学习之工厂类 com.mchange.v2.c3p0.DataSources

版本:c3p0-0.9.2.1

代码长度:382

官方文档出处:http://www.mchange.com/projects/c3p0/   useing the  datasources factory class

我们先从一个简单的例子来了解这个类

package test;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mchange.v2.c3p0.DataSources;

public class testUnpooledDatasource {
	public static void main(String[] argv) {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			DataSource ds_unpooled = DataSources.unpooledDataSource(
					"jdbc:oracle:thin:@10.185.15.183:1521:gxmc2", "gxpm5",
					"gxpm5");
			Connection con = null;
			Statement stmt = null;
			ResultSet rs = null;
			try {
				con = ds_unpooled.getConnection();
				stmt = con.createStatement();
				rs = stmt.executeQuery("select count(*) from bo_designone ");
				while (rs.next())
					System.out.println(rs.getString(1));
			} finally {
				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 void UsePoolBackedDataSource() {
	}

}




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

直接获取了jdbc数据源

DataSource ds_pooled = DataSources.pooledDataSource( ds_unpooled )

再把他转成 有连接池的数据源


后台在处理的时候用到了关键类

com.mchange.v2.c3p0.DriverManagerDataSource

他继承了DriverManagerDataSourceBase 又实现了接口 DataSource

DriverManagerDataSource out = new DriverManagerDataSource();

new的时候创建DriverManagerDataSource 并使用C3P0Registry注册当前类,底层涉及到了Coalescer,c3p0自己维护的一个唯一值set ,用来做仓储用。

新建完了以后 绑定一个值变化的监听器,这个很有意思,大家不妨看一下DriverManagerDataSource的方法 setUpPropertyListeners

接着从配置文件里去取数据库的用户名和密码维护在自身的变量里。

然后就是常用的获取连接的操作了

最终的datasource 是进过这几部来到我们面前的

1DriverManagerDataSource打算new 一个自身出来,他就找到了他的父亲DriverManagerDataSourceBase ,父亲告诉他,你等着,我再生一个你出来,不过我还要到计生委那里给你弄个准生证和登记证明出来。

21DriverManagerDataSource拿到了这货,然后给他安装了个报警器setUpPropertyListeners,谁要是敢动他身上的driverClass,他就喊一句“你们不能摸的”,别人回去理解这话的意思的。

3然后他给他赋值了username  password等一些东西。

然后他就光荣的宣布他有自己的儿子了,其实是他老爸的种。


con = ds_unpooled.getConnection();
就没有什么好说的了,就是DriverManager.getDriver( jdbcUrl ).connect( jdbcUrl, properties ); 而已

重点之一:如何管理driverclass的



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,出现这个错误是因为找不到com.mchange.v2.c3p0.ComboPooledDataSource。这个c3p0连接池库的一部分,它可能没有正确地添加到项目的构建路径中。 解决这个问题的方法是确保c3p0库已经正确地添加到项目中。以下是一些可能的解决方法: 1. 确认c3p0库已经正确地添加到项目的构建路径中。可以通过以下步骤来添加库: - 在Eclipse中,右键单击项目,选择"Properties"。 - 在"Java Build Path"选项卡中,选择"Libraries"选项卡。 - 点击"Add External JARs"按钮,然后选择c3p0库的JAR文件。 - 点击"Apply"按钮保存更改。 2. 如果c3p0库已经添加到项目中,但仍然出现错误,请确保库的版本与项目的其他依赖项兼容。有时候不同版本的库之间可能会有冲突。 3. 如果以上方法都没有解决问题,可以尝试重新下载并添加最新版本的c3p0库。 以下是一个示例代码,演示了如何使用c3p0连接池创建ComboPooledDataSource对象: ```java import com.mchange.v2.c3p0.ComboPooledDataSource; public class Example { public static void main(String[] args) { ComboPooledDataSource cpds = new ComboPooledDataSource(); // 设置连接数据库的相关配置 cpds.setDriverClass("com.mysql.jdbc.Driver"); cpds.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase"); cpds.setUser("username"); cpds.setPassword("password"); // 使用连接池获取数据库连接 Connection conn = cpds.getConnection(); // 执行数据库操作 // 关闭连接 conn.close(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值