C3P0数据库连接池配置总结

C3P0配置数据库有两种方式:

(两种方式都是在有c3p0-0.9.1.2.jar这个价包的前提下进行的)
①通过本身自由的set方式,一个个的设置驱动以及账号密码
②封装.xml文件放到Src目录下,直接调用

首先第一种方式: 本身的set方法去设置参数

       //建立一个可以跟数据库连接的一个独享对象 ComboPooleDataSource
    private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
     //建立以和静态代码块,提高作用域
    static {
         try {    // try{}catch(){} 这里会报错需要抛出异常,直接处理
             dataSource.setDriverClass("com.mysql.jdbc.Driver");    //加载驱动
             dataSource.setJdbcUrl("jdbc:mysql://localhost:8080/student");  //设置连接的数据库是mysql类型,localhost 代表的是本地,8080 是端口号, student 是数据库
             dataSource.setUser("root");   //设置数据库的连接帐号
             dataSource.setPassword("admin");   //设置数据库的连接密码
         } catch (PropertyVetoException e) {
             e.printStackTrace();
         }
     }
     //写一个静态方法可以直接通过类名.() 的方式获得该方法
      public static Connection getConnection(){ //建立的是一个有Connection返回值类型的方法, 用于外界调用方法直接获取Connection 对象
          try {
              return  dataSource.getConnection();  //用于外界调用方法直接获取Connection 对象
          } catch (SQLException e) {
              //抛出去一个运行异常,说明数据库连接失败了
              throw new RuntimeException("数据库连接失败"+e);
          }
              return conn;
      }
      //关闭资源
      public static  void  close(ResultSet rst, Statement sta,Connection conn){
      // 分别去判断下ResultSet对象,Statement对象,Connection 对象是不是为空,如果为空说明就没有调用,也不存在关闭资源的说法。相反如果不为空就要节省资源,关闭它。
          if (rst != null) {      
              try {
                  rst.close();
              } catch (SQLException e) {
                  e.printStackTrace();
              }
          }
          if (sta != null) {
              try {
                  sta.close();
              } catch (SQLException e) {
                  e.printStackTrace();
              }
          }
          if (conn != null) {
              try {
                  conn.close();
              } catch (SQLException e) {
                  e.printStackTrace();
              }
          }
      }

第二种方式: 封装XML文件直接调用

在Src的根目录下建立一个.xml文件,C3P0会扫描文件进行相关的配置。

        
         
    
    
        
        com.mysql.jdbc.Driver    
        jdbc:mysql://localhost:3306/student 
        root 
        admin 

        
        
        5
        
        10
        
        2000
        
        1000
    

然后直接去封装C3P0

       //第一步 建立一个ComboPooleDDataSource对象
    private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
    //第二步 获取Connection 对象
    public  static Connection getConnection(){
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException("程序连接失败"+e);
        }
    }
    //关闭资源
    public  static  void  close(ResultSet rst, Statement sta,Connection conn){
        if (rst != null) {
            try {
                rst.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (sta != null) {
            try {
                sta.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

最后的测试连接:

//JDBC_C3P0_Utils代表的是我建立的C3P0的Class类名
        Connection conn = JDBC_C3P0_Utils.getConnection();

            PreparedStatement preparedStatement = conn.prepareStatement("INSERT  INTO  user VALUE (?,?,?);");   //?代表的是替代符
            preparedStatement.setObject(1,655);     //当你上一句调用的?好的时候,是按照顺序来的,比如:这行代码就是 设置第1个'?'为655
            preparedStatement.setObject(2,"老王吧");//这行代码就是 设置第2个'?'为"老王吧"
            preparedStatement.setObject(3,"cs123");
            int i = preparedStatement.executeUpdate(); 
            if (i > 0) {
                System.out.println("数据添加成功");
            }


        JDBC_C3P0_Utils.close(null,preparedStatement,conn);   //这里如果我们是调用我们的clos(),关闭资源的方法, 如果参数里面没有用到直接使用null代替即可

总结:

     C3P0的使用必须要配合C3P0价包(c3p0-0.9.1.2.jar)以及数据库价包(mysql-connector-java-5.1.37-bin.jar)使用。
     C3P0只是连接数据库中的一种,另外的还有JDBC,DBUtils等
     这里的executrUpdate()方法只用于新增,修改,删除数据,当你使用查询的时候就需要用executeQuery()
 PreparedStatement preparedStatement = conn.prepareStatement("SELECT  * FROM  user where pname=? and pwd=?;");
        preparedStatement.setObject(1, name);
        preparedStatement.setObject(2, pwds);
        ResultSet resultSet = preparedStatement.executeQuery();
        preparedStatement.executeQuery()
        while (resultSet.next()) {
            String pname = resultSet.getString("pname");
            String pwd = resultSet.getString("pwd");
            System.out.println(pname+"  "+pwd+" ");
        }

你可能感兴趣的:(数据库)