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 }



  • 相关阅读:
    Codeforces Round #251 (Div. 2) A
    topcoder SRM 623 DIV2 CatAndRat
    topcoder SRM 623 DIV2 CatchTheBeatEasy
    topcoder SRM 622 DIV2 FibonacciDiv2
    topcoder SRM 622 DIV2 BoxesDiv2
    Leetcode Linked List Cycle II
    leetcode Linked List Cycle
    Leetcode Search Insert Position
    关于vim插件
    Codeforces Round #248 (Div. 2) B. Kuriyama Mirai's Stones
  • 原文地址:https://www.cnblogs.com/lsymove/p/11279407.html
Copyright © 2011-2022 走看看