JDBC学习2

一.数据库连接池

  1. 概念

    数据库连接池,其实就类似一个容器(集合),存放的是数据库连接(类比线程池)

    当系统初始化好后,会创建容器,然后申请一些连接对象,当用户需要访问数据库时,可以从容器中获取连接对象,使用完毕后再归还容器。

  2. 优点

    节约系统资源,能避免频繁的创建和销毁JDBC连接。

  3. 实现方式

    Java提供了一个标准的接口javax.sql.DataSource,但这仅仅只是一个接口,没有实现,因此我们要使用连接池,还必须选择一个JDBC连接池的实现。

    一般我们不用去实现连接池,由数据库厂商去实现,常用的连接池有:

    • C3P0
    • Druid
    1. 从性能方面比较:Druid>C3P0
    2. druid功能最为全面,sql拦截等功能,统计数据较为全面,具有良好的扩展性。
    3. 综合性能,扩展性等方面,一般考虑使用Druid
  4. 连接池的操作步骤

    • C3P0

      步骤:

      1. 导入jar包

        c3p0-0.9.5.2.jar

        mchange-commons-java-0.2.12.jar

      2. 定义配置文件

        文件名称:c3p0.properties或者c3p0-config.xml

        存放路径:直接放在src目录下即可

      3. 创建连接池实例(DataSource实例)

        DataSource ds = new ComboPooledDataSource();

      4. 获取连接对象

        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);
              PreparedStatement pstate = conn.prepareStatement("select * from account");
              ResultSet rs = pstate.executeQuery();
              while (rs.next()) {
                  System.out.println(rs.getInt("id"));
                  System.out.println(rs.getString("name"));
                  System.out.println(rs.getDouble("balance"));
              }
              rs.close();
              pstate.close();
              conn.close();
          }
      }
    • Druid

      步骤:

      1. 导入jar包

        druid-1.0.9.jar

      2. 定义配置文件

        格式为properties的,名字可以是任意,路径也可以是任意

      3. 加载配置文件

        使用Properties集合类:

        Properties pro = new Properties();
        InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("druid.properties");
        pro.load(is);
      4. 获取连接池对象

        ds = DruidDataSourceFactory.createDataSource(pro);

      5. 获取连接对象

        conn = ds.getConnection();

      public class DruidDemo1 {
          public static void main(String[] args) throws Exception {
              Properties pro = new Properties();
              InputStream is = DruidDemo1.class.getClassLoader().getResourceAsStream("druid.properties");
              pro.load(is);
      
              // 获取连接池对象
              DataSource ds = DruidDataSourceFactory.createDataSource(pro);
              Connection conn = ds.getConnection();
      
              PreparedStatement pstate = conn.prepareStatement("select * from account");
              ResultSet rs = pstate.executeQuery();
              while (rs.next()) {
                  System.out.println(rs.getInt("id"));
                  System.out.println(rs.getString("name"));
                  System.out.println(rs.getDouble("balance"));
              }
              rs.close();
              pstate.close();
              conn.close();
          }
      }

猜你喜欢

转载自www.cnblogs.com/LucasBlog/p/12383479.html