jdbc------连接池代理

代理:
动态代理模式:
java中代理模式:动态/静态/Cglib代理(Spring)
接口,某个方法,扩展,不想实现所有方式
Connection ,close 扩展,不实现所有方法。
动态代理
监测,接口中,方法的执行。
close()方法,如何对Connection对象,
生成一个代理对象,
---proxy
static Object newProxyInstance(
ClassLoader loader,//当前使用的类加载器
 Class<?>[] interfaces, //目标对象实现的接口
InvocationHandler h  //事件处理器,执行接口方法,自动触发处理器代码,把当前执行方法作为参数传入。

代理:要检测close方法的执行,要把连接放回连接池,
执行close方法时候,执行了这个代码,检测了这个方法执行
如果还想检测其他的方法
写else。if...
"".equals(equals.name)从而增加一些额外的业务操作
现在讲的代理,,回去用
关于java中的三个代理

静态,动态,springcglib


private Connection createConnection(){
try {
Class.forName("com.mysql.jdbc.Driver");
//原始的目标对象
final Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc_demo","root","root");

/**
* 对conn创建代理对象
*/
Connection proxy=(Connection)Proxy.newProxyInstance(
conn.getClass().getClassLoader() ,//类加载器

conn.getClass().getInterfaces(),//目标对象实现的接口 
new InvocationHandler() {   //事件处理器,调用conn对象方法的时候会自动触发处理事件。

@Override
public Object invoke(Object proxy, Method method, Object[] arg2)
throws Throwable {
Object result=null;
String methodName=method.getName();
if("close".equals(methodName)){
System.out.println("begin:当前执行的close方法开始:");
pool.addLast(conn);
System.out.println("end:当前连接已经放入连接池了");
}
return proxy;
}
}
);
return conn;
} catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}

}



2、DPCB

开源的连接池技术
1.javax.sql.DataSource:
sun公司规定,如果是连接池技术,需要实现一个接口
2.DPCB数据库连接池:(tomcat)
   C3P0数据库连接池:(hibernate)
3.DBCP:
核心类:BasicDataSource
4.配置方式实现JDBC连接池,


package cn.itcast.c_dbcp;


import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;


import javax.sql.DataSource;


import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.junit.Test;


public class APP_DBCP {
/**
* 1.硬编码方式实现连接池
* @throws Exception
*/
//@Test
public void testDBCP() throws Exception{
//1.DBCP连接池核心类
BasicDataSource dataSource=new BasicDataSource();
//2.配置连接池参数,初始化连接数,最大连接数/连接字符串,驱动,用户名,密码
dataSource.setUrl("jdbc:mysql://localhost:3306/jdbc_demo");
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPassword("root");
dataSource.setInitialSize(3);
dataSource.setMaxActive(6);
dataSource.setMaxIdle(3000);
//2.获取连接
Connection conn=dataSource.getConnection();
conn.prepareStatement("delete from admin where id=5").executeUpdate();
//

conn.close();
}
/**
* 配置方式实现连接池,便于维护
*/
@Test
public void testProp()throws Exception{
//1.创建配置文件
Properties prop=new Properties();
//2.创建输入流
InputStream in=APP_DBCP.class.getResourceAsStream("db.properties");
//2.加载属性文件
prop.load(in);
DataSource dataSource=BasicDataSourceFactory.createDataSource(prop);

Connection conn=dataSource.getConnection();

conn.prepareStatement("delete from admin where id=4").executeUpdate();
//

conn.close();
}
}


3.C3P0

DBCP
两个ar文件
1.硬编码方式
BasicDataSource =new 
2.配置方式
Properties:map(实现map)接口:简单的程序,key--value
xml:关系型数据。根节点,中国--省份---城市--镇--乡--村


第二种开源连接池:
C3P0:
最常用的 连接池技术。Spring ,默认支持C3P0连接池技术。
核心类:ComboPooledDataSource ds;
使用
(1)导入jar包
(2)使用连接池,创建连接
  a:硬编码方式
  b:配置方式(xml)

package cn.itcast.d_c3p0;


import java.sql.Connection;


import org.junit.Test;


import com.mchange.v2.c3p0.ComboPooledDataSource;


public class APP_C3P0 {
/**
 * 1。硬编码方式。使用C3P0
 */
//@Test
public void testCode() throws Exception{
//1.创建C3P0连接池的核心工具类对象。
ComboPooledDataSource ds=new ComboPooledDataSource();
//2.设置连接参数,url,驱动,用户名,密码,初始化连接数,最大连接数
ds.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc_demo");;
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setUser("root");
ds.setPassword("root");
ds.setInitialPoolSize(3);
ds.setMaxPoolSize(6);
ds.setMaxIdleTime(3000);

Connection conn=ds.getConnection();
conn.prepareStatement("delete from admin where id=6").executeUpdate();
conn.close();
}
/**
* 2.xml配置方式,使用C3P0连接池管理
*/
@Test
public void testXML()throws Exception{
ComboPooledDataSource ds=new ComboPooledDataSource();
Connection conn=ds.getConnection();
conn.prepareStatement("delete from admin where id=1").executeUpdate();
conn.close();

}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值