首页 > 编程语言 >Java学习-JDBC(四)

Java学习-JDBC(四)

时间:2024-06-10 15:02:55浏览次数:28  
标签:JDBC Java properties 学习 connection jdbc dataSource 连接 连接池

连接池

现有问题
  • 每次操作数据库都需要重新获取新连接,使用完毕后需close释放,频繁的创建和销毁造成资源浪费
  • 连接的数量无法把控,对服务器造成巨大压力
连接池
  • 连接池是数据库连接对象的缓冲区,通过配置,由连接池负责创建连接,管理连接,释放连接等操作
  • 预先创建数据库连接放入连接池,用户在请求时,通过连接池直接获取连接,使用完毕后,将连接放回池中,避免了频繁的创建和销毁,同时解决了创建效率
  • 当池中无连接可用,且达到上退时,连接池会新建连接
  • 池中连接达到上限,用户请求会等待,可以设置超时时间
常见连接池
  • JDBC数据库连接池使用javax.sql.DataSource接口进行规范,所有的第三方连接池都实现此接口,自行添加具体实现,所有连接池获取连接和回收连接方法都一样,不同的只有性能和扩展功能
    • DBCP是Apache提供的数据库连接池,速度相对C3P0较快,但自身有一些Bug
    • C3P0是一个开源组织提供的数据库连接池,速度相对较慢,稳定性比较好
    • Proxool是sourceforge下的一个开源项目数据库连接池,有监控连接池状态的功能,稳定性较c3p0差一点
    • Druid:阿里提供的数据库连接池,是集DBCP,C3P0,Proxool优点于一身的数据库连接池,性能,扩展性,易用性都更好,功能丰富
    • Hikari:是SpringBoot2.x之后内置的一款连接池,基于BoneCP做了不少改进和优化,口号是简单,快速,可靠
      在这里插入图片描述
Druid使用
硬编码
 public void testHardCodeDruid() throws SQLException {
        /**
         * 将连接池的配置和Java代码耦合在一起
         * 1.创建DruidDataSource连接池对象
         * 2.设置连接池的配置信息
         * 3.通过连接池获取连接对象
         * 4.回收连接
         */
        String url = "jdbc:mysql://192.168.29.201:3306/jdbc?rewriteBatchedStatements=true";
        String username = "root";
        String password = "123456";
        //1.
        DruidDataSource dataSource = new DruidDataSource();
        //2.1必须设置配置
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        //2.2非必要设置
        dataSource.setInitialSize(10);//默认创建10个连接对象
        dataSource.setMaxActive(20); //最大连接数量
        //3.
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        //基于Connection进行CRUD
        //4.归还连接
        connection.close();
    }
软编码
  • 注:需要将resources文件夹标记为资源文件夹,否则通过getResourceAsStream获取时会获取不到
    在这里插入图片描述
//db.properties
driverName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://192.168.29.201:3306/jdbc?rewriteBatchedStatements=true
username=root
password=123456
initialSize=10
maxActive=20

    @Test
    public void testSoftCodeDruid() throws Exception {
        //创建properties用于存放配置文件的key和value值
        Properties properties = new Properties();
        //读取配置文件,获取输入流,加载到properties集合
        InputStream is = DruidTest.class.getClassLoader().getResourceAsStream("db.properties");
        properties.load(is);
        //基于properties集合构建DruidDataSource连接池
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
        //获取连接
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        //释放连接
        connection.close();

    }
HikariCP
  • 需要引入两个包
    在这里插入图片描述
硬编码
 /**
     * 将连接池的配置和Java代码耦合在一起
     * 1.创建HikariDataSource连接池对象
     * 2.设置连接池的配置信息
     * 3.通过连接池获取连接对象
     * 4.回收连接
     */
    @Test
    public void testHardCodeHikari() throws SQLException {
        String url = "jdbc:mysql://192.168.29.201:3306/jdbc?rewriteBatchedStatements=true";
        String username = "root";
        String password = "Lotus!1120";
        //1.
        HikariDataSource dataSource = new HikariDataSource();
        //2.1必须设置配置
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setJdbcUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        //2.2非必要设置
        dataSource.setMinimumIdle(10);//创建最小10个连接对象
        dataSource.setMaximumPoolSize(20); //最大连接数量
        //3.
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        //基于Connection进行CRUD
        //4.归还连接
        connection.close();
    }
软编码
//hikari.properties---放到resource目录下
driverClassName=com.mysql.cj.jdbc.Driver
jdbcUrl=jdbc:mysql://192.168.29.201:3306/jdbc?rewriteBatchedStatements=true
username=root
password=Lotus!1120
minimumIdle=10
maximumPoolSize=20

  @Test
    public void testSoftCodeHikari() throws Exception {
        //创建properties用于存放配置文件的key和value值
        Properties properties = new Properties();
        //读取配置文件,获取输入流,加载到properties集合
        InputStream is = HikariTest.class.getClassLoader().getResourceAsStream("hikari.properties");
        properties.load(is);
        //创建HikariConfig连接池配置对象,将Properties集合传递进去
        HikariConfig hikariConfig = new HikariConfig(properties);
        //基于HikariConfig连接池配置对象,构建HikariDataSource
        HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig);
        //获取连接
        Connection connection = hikariDataSource.getConnection();
        System.out.println(connection);
        //释放连接
        connection.close();

    }

标签:JDBC,Java,properties,学习,connection,jdbc,dataSource,连接,连接池
From: https://blog.csdn.net/xuwenpeng/article/details/139562017

相关文章

  • 01-Excel初阶操作-学习笔记
    超链接专题应用场景:一份excel表格中包含多个子表,如下图所示。让我们在目录所在的子表创建超链接,使得能够快速跳转到各个子表查看数据内容,并为每一个含有数据的表格添加返回到目录所在子表的超链接手工创建超链接具体操作:我们以制作跳转至“全部数据”所在子表为例点到目录所......
  • 动手学深度学习4.10 实战Kaggle比赛:预测房价-笔记&练习(PyTorch)
    以下内容为结合李沐老师的课程和教材补充的学习笔记,以及对课后练习的一些思考,自留回顾,也供同学之人交流参考。本节课程地址:实战Kaggle比赛:预测房价_哔哩哔哩_bilibili本节教材地址:4.10.实战Kaggle比赛:预测房价—动手学深度学习2.0.0documentation(d2l.ai)本节开源代......
  • 1900springboot VUE 生态菜园管理系统开发mysql数据库web结构java编程计算机网页源码m
    一、源码特点 springbootVUE生态菜园管理系统是一套完善的完整信息管理类型系统,结合springboot框架和VUE完成本系统,对理解JSPjava编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。前段主要技术vue 后端主......
  • 记自己学习之路
    去年9月也就是大二上学期,开始学习java,当时的路线是javase、ee、框架(ssm)这些东西,两三个月后发现收获不多还没入门,还是不懂哪些项目是怎么写出来的,又没有烦恼的过了一个寒假,寒假期间看了看若依。这学期来了,开始试着用若依二开一些小系统练手。虽然网上看大家对若依的评价褒贬......
  • java期末细节知识整理(二)
    1.int这种叫基本数据类型,Integer这种叫包装类,把基本数据类型变为包装类类型的过程叫做装箱,把包装类类型变为基本数据类型的过程叫做拆箱,而其中又分为自动装箱/拆箱和显示装箱/拆箱2.next()方法一定要读取到有效字符后才可以结束输入,会自动去掉输入有效字符之前遇到的空格键,Tab键......
  • 基于Java的银行排号系统的设计与实现参考论文
    【免费】基于Java的银行排号系统的设计与实现.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89402471基于Java的银行排号系统的设计与实现内容提要 银行排号系统是为解决一些服务业营业大厅排队问题而设计的,它能够有效地提高工作人员的工作效率,也能够使顾......
  • JavaScript prototype(原型对象)
     所有的JavaScript对象都会从一个prototype(原型对象)中继承属性和方法。在前面的章节中我们学会了如何使用对象的构造器(constructor):实例functionPerson(first,last,age,eyecolor){this.firstName=first;this.lastName=last;this.age=age;this.eye......
  • JavaScript Number 对象
     JavaScript只有一种数字类型。可以使用也可以不使用小数点来书写数字。JavaScript数字JavaScript数字可以使用也可以不使用小数点来书写:实例varpi=3.14;//使用小数点varx=34;//不使用小数点极大或极小的数字可通过科学(指数)计数法来写:实例vary=1......
  • Java 数据类型 -- Java 语言的 8 种基本数据类型、字符串与数组
    大家好,我是栗筝i,这篇文章是我的“栗筝i的Java技术栈”专栏的第004篇文章,在“栗筝i的Java技术栈”这个专栏中我会持续为大家更新Java技术相关全套技术栈内容。专栏的主要目标是已经有一定Java开发经验,并希望进一步完善自己对整个Java技术体系来充实自己的......
  • Java 程序结构 -- Java 语言的变量、方法、运算符与注释
    大家好,我是栗筝i,这篇文章是我的“栗筝i的Java技术栈”专栏的第003篇文章,在“栗筝i的Java技术栈”这个专栏中我会持续为大家更新Java技术相关全套技术栈内容。专栏的主要目标是已经有一定Java开发经验,并希望进一步完善自己对整个Java技术体系来充实自己的......