数据库_连接池

数据库——数据库连接池(数据源)
第一部分:数据库连接池的相关概念
1.传统JDBC的缺点:在使用传统的JDBC开发中,每一次的数据库连接对象的创建和销毁都要花费内存和时间。减低开发的效率。为了克服这个缺点,提升性能,因此引入了连接池技术,来共享Connection;

2.数据库连接池的概念:创建多个数据库的连接对象,将其保存到一个池中,通过池来管理数据库的连接对象,因此,无需我们自己去创建Connection对象,直接通过池来创建,用完之后,调用该对象的close()方法,将该对象归还给池中。实现重复利用的效果。
3.连接池的规范:为了方便应用程序切换不同的连接池,Java为连接池提供了公共的接口:Javax.sql.DataSource,连接池都需要实现该接口。
第二部分:使用C3P0连接池
c3p0的使用步骤:
    1.导入相应的jar-->数据库驱动还有c3p0的jar包
    2.编写配置文件
        配置文件的名称:c3p0-config.xml
        配置文件的路径:src/classpath(类路径)
        配置文件的内容:命名配置
    配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
        <c3p0-config>
          <default-config>
            <!-- 加载的类名 -->
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <!-- 数据库的url地址 -->
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydatabase</property>
            <!-- 用户名 -->
            <property name="user">root</property>
            <!-- 密码 -->
            <property name="password">123</property>

            <property name="maxIdleTime">30</property>
            <!-- 最大连接数 -->
            <property name="maxPoolSize">100</property>
            <!-- 最小连接数 -->
            <property name="minPoolSize">10</property>
            <!-- 控制数据源中PreparedStatement的对象数量 -->
            <property name="maxStatements">200</property>
          </default-config>

          <!-- This app is massive! -->
          <named-config name="mysql"> 
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydatabase</property>
            <property name="user">root</property>
            <property name="password">123</property>

            <property name="maxIdleTime">30</property>
            <property name="maxPoolSize">100</property>
            <property name="minPoolSize">10</property>
            <property name="maxStatements">200</property>
          </named-config>
        </c3p0-config>
    3.编写c3p0的工具类
package com.wgy.JDBC.Utils;

        import java.sql.Connection;
        import java.sql.SQLException;

        import com.mchange.v2.c3p0.ComboPooledDataSource;

        public class C3P0Utils {
            //创建下面的类会自动加载位于src目录下的配置文件(c3p0-config.xml),并且加载名字为MySQL的数据
            //ComboPooledDataSource dataSource2 = new ComboPooledDataSource("mysql");
            private static ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql");
            private static Connection con = null;

            public static ComboPooledDataSource getComboPooledDataSource(){
                return dataSource;
            }

            public static Connection getConnection(){
                try {
                    return dataSource.getConnection();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block

                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
            }
        }
第三部分:使用DBCP连接池
DBCP的使用步骤:
    1.导入相应的jar包:
        数据库驱动,DBCP相应的jar包
    2.编写配置文件
        配置文件的名称:*.properties
        配置文件的路径:src/classpath(类路径)
        配置文件的内容:properties不能编写中文
            driver=com.mysql.jdbc.Driver
            url=jdbc:mysql://localhost:3306/mydatabase
            username=root
            password=123
    3.编写DBCP的工具类
package com.wgy.JDBC.Utils;
            import java.io.IOException;
            import java.io.InputStream;
            import java.sql.Connection;
            import java.sql.SQLException;
            import java.util.Properties;
            import java.util.ResourceBundle;
            /*
             * 这里编写DBCP的工具类
             */
            import javax.sql.DataSource;
            import org.apache.commons.dbcp.BasicDataSource;
            public class DBCPUtils {
                private static DataSource dataSource = null;
                private static String driver = null;
                private static String url = null;
                private static String username = null;
                private static String password =null;
                /*
                 * 写法一:
                 * static{
                    try {
                        //加载配置文件
                        InputStream in = DBCPUtils.class.getClassLoader().getResourceAsStream("db.properties");
                        //生成配置文件对象
                        Properties pro = new Properties();
                        pro.load(in);

                        dataSource = BasicDataSourceFactory.createDataSource(pro);       

                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }*/

                /*
                 * 写法二:
                 * static{
                    try {
                        //加载配置文件
                        InputStream in = DBCPUtils.class.getClassLoader().getResourceAsStream("db.properties");
                        //生成配置文件对象
                        Properties pro = new Properties();
                        pro.load(in);

                        driver = pro.getProperty("driver");
                        url = pro.getProperty("url");
                        username = pro.getProperty("username");
                        password = pro.getProperty("password");

                        dataSource = new BasicDataSource();
                        ((BasicDataSource) dataSource).setDriverClassName(driver);
                        ((BasicDataSource) dataSource).setUrl(url);
                        ((BasicDataSource) dataSource).setUsername(username);
                        ((BasicDataSource) dataSource).setPassword(password);

                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }*/

                //写法三:
                static{
                    try {
                        //加载配置文件
                        ResourceBundle bundle =ResourceBundle.getBundle("db");

                        driver = bundle.getString("driver");
                        url = bundle.getString("url");
                        username = bundle.getString("username");
                        password = bundle.getString("password");

                        dataSource = new BasicDataSource();
                        ((BasicDataSource) dataSource).setDriverClassName(driver);
                        ((BasicDataSource) dataSource).setUrl(url);
                        ((BasicDataSource) dataSource).setUsername(username);
                        ((BasicDataSource) dataSource).setPassword(password);

                    } 
                    catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

                public static DataSource getDataSource(){
                    return dataSource;
                }

                public static Connection getConnection(){
                    try {
                        return dataSource.getConnection();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        throw new RuntimeException(e);
                    }
                }

            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值