zoukankan      html  css  js  c++  java
  • spring相关—IOC容器相关—数据连接池

    数据库连接池
            > 数据库连接池就是存放数据库连接(Connection)的集合
            > 我们获取一个数据库连接是一个相对很麻烦的过程,
                如果我们获取一个数据库连接,使用一次以后就给它关闭了
                    下一次再去使用的时候就要重新创建一个新的数据库连接。
            > 所以我们提出了一个数据库连接池的概念,数据库连接池放的都是数据库连接(Connection)
                我们在去使用数据库连接时候,不用再去重新创建数据库连接,而是直接从池中获取,
                    使用完的数据库连接,也不是直接销毁,而是要放回到连接池。
            >
            数据库连接池的常见的属性:
            
                    初始连接数量:数据连接池创建以后,保存数据库连接的数量[50]
                    
                    最小空闲连接数:数据库连接池最少得未使用的数据库连接的数量[10]
                
                    最大空闲连接数:数据库连接池最大闲置连接数,当闲置连接数满了以后,将不会有其他连接进入池
                
                    每次增加连接数:当数据库连接都被占用以后,一次性增加的数据库连接的个数[20]

                    最大连接数:数据库连接池的最大容量,当最大连接数饱和了,则不再创建新的数据库连接[100]
                
                    最大等待时间:当数据库连接池饱和以后,等待获取数据库连接的时间
                
            > 常见的数据库连接池
                - 所有的数据库连接池都需要实现DataSource,当使用数据库连接池是,我们便不再需要使用DriverManger获取数据库连接
                    而是使用DataSource。
                     - Connection getConnection()
                        - 从数据库连接池中获取数据库连接对象

                1.DBCP
                    - DBCP是Apache出品的一款数据库连接
                    - DBCP依赖于commons-pool
                    - 使用DBCP需要导入两个jar包:
                        commons-dbcp-1.4.jar
                        commons-pool-1.5.5.jar
                    - 当我们通过数据库连接池获取数据库连接以后,我们所获取到数据库连接已经不是我们熟悉的那个Connection
                        数据库连接池对Connection对象进行了包装,它修改Connection的close()方法,
                            再去调用close()数据库连接将不会真的关闭,而是要放回到数据库连接池中,供其他线程使用。
                    - 核心类:
                        BasicDataSourceFactory
                
                2.C3P0(重点)
                    - C3P0使用的是XML作为配置文件
                    - 使用c3p0需要导入一个jar包:
                        c3p0-0.9.1.2.jar
                    - 导入c3p0的配置文件:
                        1.配置文件的名字:c3p0-cofig.xml
                        2.配置文件要求放到类路径下(src)
                    - 核心类:    
                        ComboPooledDataSource
                    - 注意:
                        DataSource就相当于池子,我们的数据库连接都是从DataSource中获取的,
                            如果程序中有多个DataSource的实例,那么我们说你还不如不用数据库连接池。
                        所以我们的DataSource在项目中应该只有一个实例。

    示例:

    1、在properties文件中填写数据连接所需属性:

    jdbc.username=root
    jdbc.password=123456
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/student

    2、在bean中设置引用外部文件properties中内容:

        <!-- 外部文件引用 ,properties文件均是键值对格式--><!-- 加载配置文件 -->
        <context:property-placeholder location="classpath:jdbc.properties"/>

    3、在bean中创建数据库连接池:

    1     <!-- 创建数据库连接池 -->
    2     <bean id="comboPooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    3         <property name="user" value="${jdbc.username}"></property>
    4         <property name="password" value="${jdbc.password}"></property>
    5         <property name="driverClass" value="${jdbc.driver}"></property>
    6         <property name="jdbcUrl" value="${jdbc.url}"></property>
    7     </bean>

    4、创建IOC容器对象,在IOC容器中获取数据库连接池

     1      //1、创建IOC容器对象
     2         ApplicationContext ioc=new ClassPathXmlApplicationContext("applicationContext.xml");
     3         //2、从IOC容器中获取数据库连接池
     4         方法1:(import javax.sql.DataSource;)    
     5             DataSource bean = ioc.getBean(DataSource.class);
     6             System.out.println(bean);
     7             System.out.println(bean.getConnection());
     8         方法2:
     9             Object bean = ioc.getBean("comboPooledDataSource");
    10             System.out.println(bean.getClass());

    5、数据库调用的示例:

     1 //1、创建IOC容器对象
     2         ApplicationContext ioc=new ClassPathXmlApplicationContext("applicationContext.xml");
     3 
     4         //2、连接数据库进行一些操作
     5         DataSource bean = ioc.getBean(DataSource.class);
     6         //3、从数据库连接池中获取链接
     7         Connection connection = bean.getConnection();
     8         String sql="select * from stu";
     9         PreparedStatement ps = connection.prepareStatement(sql);
    10         ResultSet rs = ps.executeQuery();
    11         while(rs.next()){
    12             String name=rs.getString("name");
    13             String school=rs.getString("school");
    14             double score=rs.getDouble("score");
    15             System.out.println("name:"+name+",school:"+school+",score:"+score);
    16         }
    在类中进行查询数据库操作
  • 相关阅读:
    MD5 Message Digest Algorithm in Visual Basic 6
    遍历指定文件夹的指定格式的文件并且copy到指定的文件夹下面
    宝宝的成长脚印8/17
    儿歌童谣两首
    office2003之資料編輯列的角字顯示7/10
    宝宝的成长脚印8/27
    宝宝的成长脚印7/30
    宝宝的成长脚印7/3
    LED手电筒真不咋滴8/27
    液晶显示器右边出现黑条7/7
  • 原文地址:https://www.cnblogs.com/kangxingyue-210/p/7445279.html
Copyright © 2011-2022 走看看