• Java学习笔记50(DBCP连接池)


    实际开发中,连接数据库是十分消耗资源的操作,但是,我们又需要频繁地连接数据库

    这时候,为了提高效率,这里就会采用连接池技术:

    连接池地通俗理解:

    一个池里面放入很多的连接,需要哪一个取出来用即可,用完放回去,而不是关闭连接

    这里使用到四个jar包

    commons-dbcp-1.4.jar

    commons-pool-1.5.6.jar

    mysql-connector-java-5.1.37-bin.jar

    commons-dbutils-1.6.jar

    DataSource接口:连接池的规范接口

    BasicDataSource类:导入的jar包中的实现类

    连接池连接数据库的方法与配置:

    package demo;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    
    import org.apache.commons.dbcp.BasicDataSource;
    
    public class DataSourceDemo {
        public static void main(String[] args) {
            BasicDataSource dataSource = new BasicDataSource();
            // 常规基本配置
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql://localhost:3306/mybase");
            dataSource.setUsername("root");
            dataSource.setPassword("xuyiqing");
            // 连接池配置
            dataSource.setMaxActive(10);// 最大连接数
            dataSource.setMaxIdle(5);// 最大空闲连接
            dataSource.setMinIdle(2);// 最小空闲连接
            dataSource.setInitialSize(5);// 初始化连接
            try {
                Connection con = dataSource.getConnection();
            } catch (SQLException ex) {
                ex.printStackTrace();
                throw new RuntimeException("数据库连接失败");
            }
        }
    }

    接下来创建一个连接池的工具类,用于方便开发:

    数据准备:创建表:

    CREATE TABLE sort(
      sid INT PRIMARY KEY AUTO_INCREMENT,
      sname VARCHAR(100),
      sprice DOUBLE,
      sdesc VARCHAR(5000)
    );

    工具类:

    package demo;
    
    import javax.sql.DataSource;
    
    import org.apache.commons.dbcp.BasicDataSource;
    
    public class JDBCUtils {
        private static BasicDataSource dataSource = new BasicDataSource();
    
        static {
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql://localhost:3306/mybase");
            dataSource.setUsername("root");
            dataSource.setPassword("xuyiqing");
            dataSource.setInitialSize(10);
            dataSource.setMaxActive(8);
            dataSource.setMaxIdle(5);
            dataSource.setMinIdle(1);
        }
    
        public static DataSource getDataSource() {
            return dataSource;
        }
    }

    测试:

    package demo;
    
    import java.sql.SQLException;
    import java.util.List;
    
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.handlers.ArrayListHandler;
    
    public class QueryRunnerDemo {
        private static QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
    
        public static void main(String[] args) {
            insert();
        }
    
        public static void insert() {
            String sql = "INSERT INTO sort (sname,sprice,sdesc)VALUES(?,?,?)";
            Object[] params = { "水果", 20, "促销" };
            try {
                qr.update(sql, params);
            } catch (SQLException ex) {
                throw new RuntimeException("数据添加失败");
            }
        }
    
        public static void select() {
            String sql = "SELECT * FROM sort";
            try {
                List<Object[]> list = qr.query(sql, new ArrayListHandler());
                for (Object[] objs : list) {
                    for (Object obj : objs) {
                        System.out.println(obj + "	");
                    }
                }
            } catch (SQLException ex) {
                throw new RuntimeException("数据添加失败");
            }
        }
    }
  • 相关阅读:
    线程与并发系列一:Lock、Monitor、UserSpinLock
    什么是WebService
    异步和多线程有什么区别
    java.sql.SQLException: The server time zone value '' is unrecognized or represents
    java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password'.
    本地如何查看zookeeper注册了哪些服务
    maven的archetype
    Windows下安装ZooKeeper
    Dubbo架构和原理
    IntelliJ IDEA 2019.2.4破解
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/8328814.html
Copyright © 2020-2023  润新知