zoukankan      html  css  js  c++  java
  • JDBC两种连接池

    数据库连接池
        1. 概念:其实就是一个容器(集合),存放数据库连接的容器。
                当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。

        2. 好处:
            1. 节约资源
            2. 用户访问高效

        3. 实现:
            1. 标准接口:DataSource   javax.sql包下的
                1. 方法:
                    * 获取连接:getConnection()
                    * 归还连接:Connection.close()。如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接

            2. 一般我们不去实现它,有数据库厂商来实现
                1. C3P0:数据库连接池技术
                2. Druid:数据库连接池实现技术,由阿里巴巴提供的


        4. C3P0:数据库连接池技术
            * 步骤:
                1. 导入jar包 (两个) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar ,
                    * 不要忘记导入数据库驱动jar包
                2. 定义配置文件:
                    * 名称: c3p0.properties 或者 c3p0-config.xml
                    * 路径:直接将文件放在src目录下即可。

                3. 创建核心对象 数据库连接池对象 ComboPooledDataSource
                4. 获取连接: getConnection

    代码:
                 //1.创建数据库连接池对象
                DataSource ds  = new ComboPooledDataSource();
                //2. 获取连接对象
                Connection conn = ds.getConnection();

    public class C3P0demo1 {
        public static void main(String[] args) throws SQLException {
            //1创建数据库连接对象
            DataSource ds = new ComboPooledDataSource();
            //2获取连接对象
            Connection conn = ds.getConnection();
            System.out.println(conn);
        }
    }

    5. Druid:数据库连接池实现技术,由阿里巴巴提供的
            1. 步骤:
                1. 导入jar包 druid-1.0.9.jar
                2. 定义配置文件:
                    * 是properties形式的
                    * 可以叫任意名称,可以放在任意目录下
                3. 加载配置文件。Properties
                4. 获取数据库连接池对象:通过工厂来来获取  DruidDataSourceFactory
                5. 获取连接:getConnection
            * 代码:
                 //3.加载配置文件
                Properties pro = new Properties();
                InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
                pro.load(is);
                //4.获取连接池对象
                DataSource ds = DruidDataSourceFactory.createDataSource(pro);
                //5.获取连接
                Connection conn = ds.getConnection();

     定义工具类
                1. 定义一个类 JDBCUtils
                2. 提供静态代码块加载配置文件,初始化连接池对象
                3. 提供方法
                    1. 获取连接方法:通过数据库连接池获取连接
                    2. 释放资源
                    3. 获取连接池的方法

     1 public class JDBCUtils {
     2 
     3     //1.定义成员变量 DataSource
     4     private static DataSource ds ;
     5 
     6     static{
     7         try {
     8             //1.加载配置文件
     9             Properties pro = new Properties();
    10             pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
    11             //2.获取DataSource
    12             ds = DruidDataSourceFactory.createDataSource(pro);
    13         } catch (IOException e) {
    14             e.printStackTrace();
    15         } catch (Exception e) {
    16             e.printStackTrace();
    17         }
    18     }
    19 
    20     /**
    21      * 获取连接
    22      */
    23     public static Connection getConnection() throws SQLException {
    24         return ds.getConnection();
    25     }
    26 
    27     /**
    28      * 释放资源
    29      */
    30     public static void close(Statement stmt,Connection conn){
    31        /* if(stmt != null){
    32             try {
    33                 stmt.close();
    34             } catch (SQLException e) {
    35                 e.printStackTrace();
    36             }
    37         }
    38 
    39         if(conn != null){
    40             try {
    41                 conn.close();//归还连接
    42             } catch (SQLException e) {
    43                 e.printStackTrace();
    44             }
    45         }*/
    46 
    47        close(null,stmt,conn);
    48     }
    49 
    50 
    51     public static void close(ResultSet rs , Statement stmt, Connection conn){
    52 
    53 
    54         if(rs != null){
    55             try {
    56                 rs.close();
    57             } catch (SQLException e) {
    58                 e.printStackTrace();
    59             }
    60         }
    61 
    62 
    63         if(stmt != null){
    64             try {
    65                 stmt.close();
    66             } catch (SQLException e) {
    67                 e.printStackTrace();
    68             }
    69         }
    70 
    71         if(conn != null){
    72             try {
    73                 conn.close();//归还连接
    74             } catch (SQLException e) {
    75                 e.printStackTrace();
    76             }
    77         }
    78     }
    79 
    80     /**
    81      * 获取连接池方法
    82      */
    83 
    84     public static DataSource getDataSource(){
    85         return  ds;
    86     }
    87 
    88 }

    Spring JDBC
        * Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
        * 步骤:
            1. 导入jar包


            2. 创建JdbcTemplate对象。依赖于数据源DataSource
                * JdbcTemplate template = new JdbcTemplate(ds);

            3. 调用JdbcTemplate的方法来完成CRUD的操作
                * update():执行DML语句。增、删、改语句
                * queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合
                    * 注意:这个方法查询的结果集长度只能是1
                * queryForList():查询结果将结果集封装为list集合
                    * 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
                * query():查询结果,将结果封装为JavaBean对象
                    * query的参数:RowMapper
                        * 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
                        * new BeanPropertyRowMapper<类型>(类型.class)
                * queryForObject:查询结果,将结果封装为对象
                    * 一般用于聚合函数的查询

     1 public class JDBCTemplateDemo1 {
     2 public static void main(String[] args) {
     3     //1导入jar包
     4     //2创建JDBCTemplate对象
     5     JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
     6     //调用方法
     7     
     8     String sql = "update user set username='guojia' where id = ?";
     9     
    10     int count =  template.update(sql, 1);
    11     System.out.println(count);
    12 }
    13 }



  • 相关阅读:
    react fake double , bind click and dblclick on the same element
    Microbit MicroPython 介绍
    树莓派Raspberry Pi微改款,Model B 3+规格探析
    用Micro:bit做剪刀、石头、布游戏
    用Micro:bit做交通信号灯
    树莓派 Raspberry Pi 与 micro:bit起手式
    Microbit蓝芽配对
    micro:bit 软件生态系统介绍
    Micro:bit 硬件架构介绍
    Ruby 学习笔记7
  • 原文地址:https://www.cnblogs.com/lsymove/p/11279407.html
Copyright © 2011-2022 走看看