目标:连接池
使用DBUtils组件更新和查询数据库
QueryRunner qr = new QueryRunner();
qr.query(con,sql,rsh);
//rsh:ResultSetHandler接口,可以使用自定义实现类,改写handle()方法;也可以使用封装的实现类。
List<Person> list = qr.query(con,sql,new BeanListHandler<Person>(Person.class))
在使用代理模式时:
Proxy static Object new ProxyInstance(
ClassLoader loader, //当前使用的类加载器this.getClass().getClassLoader()
Class<?>[] interfaces,//获取接口对象实现的接口类型
InvocationHandler h //事件处理器,当该对象执行接口中的方法时,会触发事件处理器代码,可以将需要改变的方法作为参数(method)传入;
);
获取具体类实现的接口:
obj.getClass().getInterfaces();
获取接口对象实现的接口
new Class[]{Object.class};
通常我们把对接口 javax.sql.DataSource的实现,称为数据源,数据源中包含了数据库连接池的实现。由一些开源组织提供了数据源的独立实现:
核心类:BasicDataSource
@Test
public void testConfig() throws Exception {
Properties prop = new Properties();
InputStream in = DBCP_demo.class.getResourceAsStream("/db.properties");
prop.load(in);
DataSource dataSource = BasicDataSourceFactory.createDataSource(prop);
Connection conn = dataSource.getConnection();
PreparedStatement pstm = conn.prepareStatement("insert into employee values(?,'chenchen','nv',29,'dsadioua','dw@eewe','43243243');");
pstm.setObject(1, 8);
pstm.executeUpdate();
conn.close();
}
使用配置文件获取数据源配置
db.properties
url=jdbc:mysql://localhost:3306/day17
driverClassName=com.mysql.jdbc.Driver
username=root
password=root
initalSize=3
maxActive=6
maxIdle=5000
//注意key需要和DBCP的方法名匹配
最常用的连接技术,Spring和Hibernate框架支持C3P0连接池技术
核心类:CombopooledDataSource ds;
@Test
public void testC3P0() throws Exception {
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setJdbcUrl("jdbc:mysql://localhost:3306/day17");
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setUser("root");
ds.setPassword("root");
ds.setInitialPoolSize(3);
ds.setMaxPoolSize(6);
ds.setMaxIdleTime(1000);
Connection conn = ds.getConnection();
PreparedStatement pstm = conn.prepareStatement("delete from employee where id=?");
pstm.setObject(1, 3);
pstm.executeUpdate();
conn.close();
}
自动加载src目录下的c3p0-config.xml文件,配置连接池
@Test
public void testname() throws Exception {
//自动加载src目录下的c3p0-config.xml配置文件
ComboPooledDataSource ds = new ComboPooledDataSource();
Connection conn = ds.getConnection();
conn.prepareStatement("delete from employee where id=4;").execute();
conn.close();
}
注意:property的name属性必须小写开头,再使用驼峰式命名!
<default-config>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/day17</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="initialPoolSize">10</property>
<property name="maxPoolSize">25</property>
<property name="maxIdleTime">3000</property>
</default-config>
//获取连接池配置文件信息
ComboPooledDataSource ds = new ComboPooledDataSource("oracle-config");
<named-config name="oracle-config">
<property name="jdbcUrl">jdbc:mysql://localhost:3306/day17</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="initialPoolSize">10</property>
<property name="maxPoolSize">25</property>
<property name="maxIdleTime">3000</property>
</named-config>
使用d3p0连接池技术-步骤:
交给连接池!改写项目中DBUtils类