DBCP 导包:commons-dbcp-1.4.jar commons-pool-1.5.6.jar |
privatestatic DataSource(BasicDataSource) ds = new BasicDataSource();
只有使用BasicDataSource对象才能调用下列的方法 *ds.setUrl(myUrl); *dds.setUsername(myUser); *//设置密码 *ds.setPassword(myPassword); *//设置最大等待时间 *ds.setMaxWait(3000); *//设置初始看连接数 *ds.setInitialSize(5); *//设置最大连接数 * ds.setMaxActive(10); |
privatestatic DataSource ds = null; 下列代码放在static(静态代码块) --需要一个properties文件 Propertiesprop = new Properties(); try { //找到properties配置文件 prop.load(DBCPUtil.class.getResourceAsStream("/dbcp.properties")); //通过basic 工厂进行创建 DataSource ds = BasicDataSourceFactory.createDataSource(prop); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } |
C3P0 导包:c3p0-0.9.1.2.jar |
获取连接对象:private static DataSource ds = newComboPooledDataSource();
privatestatic DataSource cp = new ComboPooledDataSource(); ComboPooledDataSource 对象的属性: //设置url cp.setJdbcUrl(myUrl); //设置用户名 cp.setUser(myUser); //设置密码 cp.setPassword(myPassword);
//设置初始连接数 cp.setInitialPoolSize(5); //设置最大连接数 cp.setMaxPoolSize(10); //设置等待时间 cp.setCheckoutTimeout(3000); |
C3P0关键代码: privatestatic DataSource ds = new ComboPooledDataSource(); public static Connection getConnection(){ try { Connection conn = ds.getConnection(); return conn; } catch (Exception e) { throw new RuntimeException(e); } } |
//使用有参的构造方法-使用命名配置:named-config private static DataSource empSysds = newComboPooledDataSource("empSysDB"); |
使用DBCP连接时使用的配置文件代码: url=jdbc:mysql://localhost:3306/day17?useUnicode=true&characterEncoding=utf-8 username=root password=1234 driverClassName=com.mysql.jdbc.Driver
initialSize=5 maxActive=12 maxWait=5000 |
使用C3P0使用XML文件进行读取 XML命名规范:c3p0-config.xml <?xmlversion="1.0" encoding="utf-8"?> <c3p0-config> <!-- 默认配置 --> <!-- 属性规则:name值和方法名称相同 --> <default-config> <property name="jdbcUrl">jdbc:mysql://localhost:3306/day17?useUnicode=true&characterEncoding=utf-8</property> <propertyname="user">root</property> <propertyname="password">root</property> <propertyname="driverClass">com.mysql.jdbc.Driver</property>
<propertyname="initialPoolSize">5</property> <propertyname="maxPoolSize">12</property> <propertyname="checkoutTimeout">3000</property> </default-config>
<!-- 命名配置 --> <named-configname="empSysDB"> <propertyname="jdbcUrl">jdbc:mysql://localhost:3306/empsys?useUnicode=true&characterEncoding=utf-8</property> <propertyname="user">root</property> <propertyname="password">1234</property> <propertyname="driverClass">com.mysql.jdbc.Driver</property>
<propertyname="initialPoolSize">5</property> <propertyname="maxPoolSize">14</property> <propertyname="checkoutTimeout">3000</property> </named-config> </c3p0-config> |
直接连接: Connectionconn = DriverManager.getConnection(); static String myUrl = "jdbc:mysql://localhost:3306/day16?useUnicode=true&characterEncoding=utf-8"; static String myUser = "root"; static String myPassword = "root"; static String dirver= "com.mysql.jdbc.Driver"; |
使用代理类 implements DataSource static ObjectnewProxyInstance( ClassLoader loader, 类加载器,通用会使用当前类的类加载器 Class<?>[] interfaces, 指定代理类实现的接口。 通用写被代理类的接口 InvocationHandler h 代理策略。(代理类需要做什么?) ) 用于返回创建好的代理类实例
Human proxy =(Human)Proxy.newProxyInstance( Boss.class.getClassLoader(), new Class[]{Human.class}, new InvocationHandler() { // 代理策略。(代理类需要做什么?) /** * proxy: 代理类实例 * method: 当前调用的代理类的方法 * args: 当前调用代理类方法时传入的参数 */ @Override public Object invoke(Object proxy,Method method, Object[] args) throws Throwable { //调用被代理类对象的sing和dance方法,且抽一半佣金 //System.out.println("调用方法");
//得到当前方法名称 String name =method.getName(); //得到参数值 double money =(Double)args[0]; if("sing".equals(name)){ //调用sing方法 sb.sing(money/2); } if("dance".equals(name)){ sb.dance(money/2); } return null; } }); |