zoukankan      html  css  js  c++  java
  • DBCP数据库连接池

    在用JDBC连接数据库的时候,需要创建对数据库的连接,这样才能执行后续的操作。然而,这样做有两个问题:

    1. 数据库允许的连接个数有限
    2. 创建连接的过程需要消耗内存和时间

    所以,JDBC引入了连接池的概念。也就是说,连接池里面维护着一些对数据的连接对象,我们的代码需要的时候直接拿来用就可以了,这样就不必每次需要对数据库连接的时候再新建Connection对象,节省时间空间,从而提高软件质量。(eg. Apache就维护了一个连接池,让我们的web 程序能够方便的使用)

    这里我们使用Apache的开源组件DBCP连接池。DBCP连接池通过一个DasicDataSource对象来实现连接池的管理。DBCP可以从commons.apache.org官方网站下载,它包括三个JAR包。

     

    常用接口如下:

     

    示例代码:

    import java.sql.Connection;

    import java.sql.ResultSet;

    import java.sql.SQLException;

    import java.sql.Statement;

    import org.apache.commons.dbcp2.BasicDataSource;

    public class Hello

    {

           static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";

           static String DB_URL = "jdbc:mysql://localhost:3306/mldn";

           static final String USERNAME = "root";

           static final String PASSWORD = "admin";

           static BasicDataSource bds = null;

          

           public static void dbPoolInit()

           {

                  bds = new BasicDataSource();

                  bds.setUrl(DB_URL);

                  bds.setDriverClassName(JDBC_DRIVER);

                  bds.setUsername(USERNAME);

                  bds.setPassword(PASSWORD);

           }

          

        public static void main(String a[]) 

        {

           Connection conn = null;

           Statement stmt = null;

           ResultSet rs = null;

          

           Hello.dbPoolInit();

          

           try

                  {

                         conn = bds.getConnection();

                         stmt = conn.createStatement();

                  rs = stmt.executeQuery("SELECT name FROM user;");

                  while(rs.next())

                  {

                         System.out.println("Hello " + rs.getString("name"));

                  }

                  } catch (SQLException e)

                  {

                         // TODO Auto-generated catch block

                         e.printStackTrace();

                  }

           finally

           {

                  try

                  {

                         conn.close();

                         stmt.close();

                         rs.close();

                         bds.close();

                  }

                  catch(Exception e)

                  {

                         //ignore all exceptions when closing.

                  }

                  }

          

           System.out.println("///Done~~");

        }

    }

  • 相关阅读:
    信号
    13. 罗马数字转整数
    ES6基础-constructor与super
    关于antd-vue动态表单的问题以及解决方案
    (vue)关于在ui框架方法中传入多个参数的解决方案
    ts-4: 类型别名与interface
    ts-3:元组与类型约束
    TS-2:类型注释与类型推断、函数参数的定义与返回类型的定义、对象成员与数组成员的定义方法、类型别名与类别名
    LeetCode 141. 环形链表 | Python
    LeetCode 459. 重复的子字符串 | Python
  • 原文地址:https://www.cnblogs.com/kuillldan/p/5864673.html
Copyright © 2011-2022 走看看