zoukankan      html  css  js  c++  java
  • JavaEE学习之jdbc数据库连接池

    数据库连接池

      概述:管理数据库连接

      作用:提高项目的性能

      原理:在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,从连接池中取出一个已建立的空闲连接对象。使用完毕后,将连接放回连接池中,以供下一个请求访问使用

    ☆必须导入(mysql-connector-java-5.1.40-bin.jarmchange-commons-java-0.2.11.jar);

    ☆所有的连接池必须实现一个接口:java.sql.DataSource

    ☆获取连接的方法:Connection getConnection();

    ☆归还连接的方法:XXX.close();

    常用的数据库连接池有:DBCP和C3P0

    DBCP使用步骤:

    1.导入jar包(commons-dbcp-1.4.jar和commons-pool-1.5.6.jar

    2.使用api

      a.硬编码

     1   //创建连接池
     2   BasicDataSource  source=new BasicDataSource();
     3   
     4   //配置信息
     5   source.setDriverClassName("com.mysal.jdbc.Driver");
     6   source.setUrl("jdbc:mysql://localhost:3306/需要连接的数据库名称");
     7   source.setUsername("数据库登录名称");
     8   source.setPassword("数据库登录密码");
     9   
    10  //获取连接
    11  Connection connection=source.getConnection();
    12  
    13  //设置SQL语句
    14  String sql=" ";
    15  
    16  //编写预处理语句
    17  prepareStatement prepare=connection.prepareStatement(sql);

       b.配置文件

     先编写一个properties文件或Xml文件

     1  //声明配置
     2   Properties properties=new Properties();
     3   properties.load(new FileInputStream("配置文件的位置"));
     4  
     5 //创建连接池
     6   DataSource source=new BasicDataSourceFactory();
     7   
     8  //获取连接
     9   Connection connection=source.getConnection();
    10  
    11 //设置SQL语句
    12  String sql=" ";
    13  
    14 //编写预处理语句
    15  prepareStatement prepare=connection.prepareStatement(sql);
    

     c3p0使用步骤:

    1.导入jar包(c3p0-0.9.1.2.jar)

       a.使用硬编码

     1 //创建连接池
     2 ComboPooledDataSource source=new ComboPooledDataSource();
     3 
     4 //设置参数
     5 source.setDriverClass(com.mysql.jdbc.Driver);
     6 source.setJdbcUrl("jdbc:mysql://localhost:3306/需要连接的数据库名称");
     7 source.setUser("数据库登录账号");
     8 source.setPassword("数据库登录密码");
     9 
    10 //获取连接
    11 Connection connection=source.getConnection();
    12 
    13 //设置SQL语句
    14 String sql= " ";
    15 
    16 //编写预处理语句
    17 PreparedStatement st=connection.prepareStatement(sql);

      b.配置文件

    配置文件的名称(必须):c3p0.properties 或者 c3p0-config.xml
    配置文件的路径(必须):src

     1 //创建连接池
     2 ComboPooledDataSource source=new CombopooledDataSource();
     3 
     4 //获取连接
     5  Connection connection=source.getConnection();
     6 
     7 //设置SQL语句
     8 String sql= " ";
     9 
    10 //编写预处理语句
    11 PreparedStatement st=connection.prepareStatement(sql);

    使用dbutils

      dbutils是apache组织的一个工具类,更放方便我们使用

    使用步骤

      1.导入jar包(commons-dbutils-1.4.jar);

      2.创建QueryRunner类

      3.编写sql

      4.执行sql  query(....)执行r操作  updata(....)执行c u d操作

    核心类和接口:

    QueryRunner:类名
      作用:操作sql语句
      构造器:
        new QueryRunner(Datasource ds);
    注意:
    底层帮我们创建连接,创建语句执行者 ,释放资源.
    常用方法:
      query(..):
      update(..):

    DbUtils:释放资源,控制事务 类
      closeQuietly(conn):内部处理了异常
      commitAndClose(Connection conn):提交事务并释放连接

    ResultSetHandler:封装结果集 接口
      ArrayHandler, 将查询结果的第一条记录封装成数组,返回
      ArrayListHandler, 将查询结果的每一条记录封装成数组,将每一个数组放入list中返回
      BeanHandler, 将查询结果的第一条记录封装成指定的bean对象,返回
      BeanListHandler, 将查询结果的每一条记录封装成指定的bean对象,将每一个bean对象放入list中 返回.
      ColumnListHandler, 将查询结果的指定一列放入list中返回
      MapHandler, 将查询结果的第一条记录封装成map,字段名作为key,值为value 返回
      MapListHandler, 将查询结果的每一条记录封装map集合,将每一个map集合放入list中返回
      ScalarHandler,针对于聚合函数 例如:count(*) 返回的是一个Long值

    dbutils案例: 

     1 import java.sql.SQLException;
     2 import java.util.List;
     3 import java.util.Map;
     4 
     5 import org.apache.commons.dbutils.QueryRunner;
     6 import org.apache.commons.dbutils.handlers.BeanHandler;
     7 import org.apache.commons.dbutils.handlers.BeanListHandler;
     8 import org.apache.commons.dbutils.handlers.MapHandler;
     9 import org.apache.commons.dbutils.handlers.MapListHandler;
    10 import org.junit.Test;
    11 
    12 import com.jdbc.utlis.Category;
    13 import com.jdbc.utlis.DataSourceUtils;
    14 
    15 public class dbUtils {
    16     @Test
    17     public void insert(){
    18         //创建queryRunner类
    19         QueryRunner queryRunner = new QueryRunner(DataSourceUtils.getDataSource());
    20         //编写sql
    21         String sql="INSERT INTO user VALUES(9,'东尼大木和周杰伦')";
    22         try {
    23         //执行sql;
    24             int update = queryRunner.update(sql);
    25             System.out.println(update);
    26         } catch (SQLException e) {
    27             // TODO Auto-generated catch block
    28             e.printStackTrace();
    29         }
    30     }
    31     @Test
    32     public void select(){
    33         //创建queryRunner类
    34         QueryRunner queryRunner = new QueryRunner(DataSourceUtils.getDataSource());
    35         //编写sql
    36         String sql="select * from user ";
    37         //执行sql;
    38         try {
    39             List<Map<String, Object>> query = queryRunner.query(sql, new MapListHandler());
    40             for (Object object : query) {
    41                 System.out.println(object);
    42             }
    43             
    44         } catch (SQLException e) {
    45             // TODO Auto-generated catch block
    46             e.printStackTrace();
    47         }
    48     }
    49 }
    dbUtilsDemo

    dbutils在使用时用到的工具类:

    ☆工具类在使用时需要导入c3p0的jar包并配置c3p0的配置文件用于连接数据库

     1 package com.jdbc.utlis;
     2 
     3 import java.sql.Connection;
     4 import java.sql.ResultSet;
     5 import java.sql.SQLException;
     6 import java.sql.Statement;
     7 
     8 import javax.sql.DataSource;
     9 
    10 import com.mchange.v2.c3p0.ComboPooledDataSource;
    11 
    12 public class DataSourceUtils {
    13     private static ComboPooledDataSource dataSource=new ComboPooledDataSource(); 
    14     /**
    15      * 获取数据源
    16      * @return ComboPooledDataSource 连接池
    17      */
    18     public static DataSource getDataSource(){
    19         return dataSource;
    20         
    21     }
    22     /**
    23      * 
    24      * 获取连接
    25      * @return 连接
    26      * @throws SQLException
    27      */
    28     public static Connection getConnection() throws SQLException{
    29              return dataSource.getConnection();
    30     }
    31     /**
    32      * 释放资源
    33      * @param Connection,Statement,ResultSet
    34      */
    35     public static void closeResource(Connection connection,Statement statement,ResultSet resultSet){
    36         closeResultSet(resultSet);
    37         closeStatent(statement);
    38         closeConnection(connection);
    39     }
    40     /**
    41      * 释放资源
    42      * @param Connection
    43      */
    44     public static void closeConnection(Connection connection){
    45         if(connection!=null){
    46             try {
    47                 connection.close();
    48             } catch (SQLException e) {
    49                 // TODO Auto-generated catch block
    50                 e.printStackTrace();
    51             }
    52         }
    53         connection=null;
    54     }
    55     /**
    56      * 释放资源
    57      * @param Statement
    58      */
    59     public static void closeStatent(Statement statement){
    60         if(statement!=null){
    61             try {
    62                 statement.close();
    63             } catch (SQLException e) {
    64                 // TODO Auto-generated catch block
    65                 e.printStackTrace();
    66             }
    67         }
    68         statement=null;
    69     }
    70     /**
    71      * 释放资源
    72      * @param ResultSet
    73      */
    74     public static void closeResultSet(ResultSet resultSet){
    75         if(resultSet!=null){
    76             try {
    77                 resultSet.close();
    78             } catch (SQLException e) {
    79                 // TODO Auto-generated catch block
    80                 e.printStackTrace();
    81             }
    82         }
    83         resultSet=null;
    84     }
    85 }
    DataSourceUtils
  • 相关阅读:
    线性支持向量机分类
    字符识别--模型集成
    字符识别--模型的训练与验证
    反射案例当中pro.load()报错问题的解决
    字节码对象功能
    BS案例服务器之系统找不到指定路径
    内部类接口实现线程
    多个异常,一次捕获,多次处理
    Objects.requireNonNull
    intellij idea编译java出现kotlin:connecting to daemon
  • 原文地址:https://www.cnblogs.com/sehcy/p/6512488.html
Copyright © 2011-2022 走看看