java基础_数据库JDBC_c3p0

拒绝窘境,当你不停滞不前的时候,就已经在退步了。

Akino·杜菲     版本声明:原创内容,请勿转载,否则将追究法律责任!

 

c3p0数据源:

1. 本数据库需要给java导入jar包:

  • 针对MySQL数据库,导入
  • 针对Oracle数据库,导入c3p0-oracle-thin-extras-0.9.1.2.jar         ,

2.使用jar包步骤

  第一步:创建一个lib:单击鼠标右键——选择New——选择Floder——输入名称:lib

  第二步:将jar包复制到lib下,单击该jar包,点击鼠标右键——Build Path——Add to Build Path

  第三步:完毕,会出现在Referenced Libaries下方,有c3p0-0.9.1.2.jar表示导入成功。

3.写一个关于c3p0的例子

package com.c3p0demo;

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

import com.mchange.v2.c3p0.ComboPooledDataSource;

/*
 * c3p0数据源
 * 
 */
public class Demo {

    public static void main(String[] args) throws Exception {
        //通过四大参数创建连接池,就可以获取连接
        ComboPooledDataSource ds = new ComboPooledDataSource();//创建连接池对象,用空参构造
        ds.setDriverClass("com.mysql.jdbc.Driver");//里面是字符串,固定的
        ds.setJdbcUrl("jdbc:mysql:///mydb123");//连接MySQL数据库,mydb123是数据库名
        ds.setUser("root");//root是MySQL数据库的登录用户名
        ds.setPassword("root");//root是MySQL数据库的登录密码
        
        //池参数,有很多如:ds.setMaxIdleTime()是最大空闲时间;ds.setMaxPoolSize()是最大池连接数;
//ds.setMaxStatements()是最大执行器语句数;ds.setMaxConnectionAge()是最大连接存活时间;
//获取连接对象
        Connection conn = ds.getConnection();//返回值是个接口,是所有厂商需要执行的规范
        Statement st = conn.createStatement();
        ResultSet rs = st.executeQuery("select * from student");//查询语句
        while(rs.next()){//有内容就取出来
            System.out.println(rs.getString(1)+","+rs.getString(2)+","+rs.getString(3));
        }//取出三列内容

        //释放资源
        rs.close();
        st.close();
        //把连接还给池!!!而不是关闭的意思。与上面两个关闭性质不一样。
        conn.close();
    }

}

说明:想要运行上面的代码需要包的导入,导入方法同2。

需要你有一个MySQL数据库中,数据库名为mydb123,内容如同:

  建议MySQL可视化软件为:,网上版本有的很多。

 

运行上述代码结果:

  说明:会输出如上内容,红色部分是日志信息,不是错误哦!

     非红色部分是真实输出的内容。将表student中的信息输出。

4.优化上面的例子

  优化思想:因为上面的例子将端口号,数据库,用户名,用户密码写死了,不能改变。因此我们需要使用配置文件将上面代码进行优化。

  注意:c3p0数据源的配置文件很特殊

  • 文件名特殊:c3p0-config.xml
  • 配置位置特殊:必须在src下!
  • c3p0-config.xml是一种超文本编辑模式,里面有标签,相当于一个数据库。
  • xml这种格式通常用来做配置文件

(1)使用c3p0-config.xml

  在src上单击鼠标右键——选择New——选择File——输入名称:c3p0-config.xml—点击Finish即可。

(2)双击c3p0-config.xml,进入后可以看到两种格式:

第一种是表格型的,Design

  第二种是代码型的,Source

 (3)设置c3p0-config.xml,将代码粘贴到Source中

<c3p0-config>
  <default-config>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql:///mydb123</property>
    <property name="user">root</property>
    <property name="password">123</property>
  </default-config>
</c3p0-config>

 (4)配合下面代码使用

package com.c3p0demo;

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

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class Demo2 {

    public static void main(String[] args) throws Exception {
        
        ComboPooledDataSource ds = new ComboPooledDataSource();
        //获取连接对象
        Connection conn = ds.getConnection();
        
        System.out.println(conn);//com.mchange.v2.c3p0.impl.NewProxyConnection@ed17bee
        //c3p0数据源使用的是动态代理模式生成的connection对象!!!
                
        Statement st = conn.createStatement();
        ResultSet rs = st.executeQuery("select * from student");
        while(rs.next()){
            System.out.println(rs.getString(1)+","+rs.getString(2)+","+rs.getString(3));
        }

        rs.close();
        st.close();
        conn.close();

    }

}

 (5)c3p0和dbcp的不同原理

  dbcp是大的连接池里面试连接对象,通过get取出,使用的是装饰者模式。

  而c3p0是动态代理模式生成的。

 

你不愿意改变的时候,往往就是你最需要改变的时候。让你变得更加专业,成为一个it精英。只有经历才能让我们更加认识自己,不经历历练就无法看见阳光。 欢迎加入BigBang高级大数据之路,qq群号:945694891

posted @ 2018-12-03 20:36  杜菲  阅读(130)  评论(0编辑  收藏  举报