德鲁伊连接池(druid)

article/2025/9/15 13:23:21

文章目录

  • 一、连接池
    • 1、什么是连接池
    • 2、为什么要用连接池
  • 二、德鲁伊连接池(druid)
    • 1.介绍
    • 2.代码实操


一、连接池

1、什么是连接池

简单来说就是一组连接组成的一个池子(集合),称为连接池。
连接池是创建和管理一个连接的缓冲池技术。

2、为什么要用连接池

我们原先在连接数据库时都是用到一次,创建一次连接,不用就关闭,再用的时候再连接。但是一旦访问数据库的请求多了起来,就会很容易占用服务器资源,还耗时。
使用连接池就能很好的解决这种问题。
连接池技术是在服务启动的时候就事先在连接池中放入一定数量的连接对象,当你需要的时候,直接从连接池中拿已经创建好的对象而不是临时去创建一个连接,这样就能提高效率。

二、德鲁伊连接池(druid)

1.介绍

Druid是阿里巴巴开源平台上的一个项目,它结合了C3P0、DBCP、Proxool等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池,也是目前最好的数据库连接池之一。

2.代码实操

(1)maven引入jar包

    <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.6</version></dependency>//jdbc要和自己数据库版本匹配<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency>

(2)在src下新建 .properties配置文件

编写基本配置参数

url=jdbc:mysql://localhost:3306/login
username=root
password=2020051034
driverClassName=com.mysql.jdbc.Driver
//初始化时建立物理连接的个数
initialSize=5
//连接池能维持的最大连接数
maxActive=10
//获取连接时最大等待时间,单位毫秒
maxWait=2000

点击了解更多配置文件的参数详情

(3)编写DBUtils工具类,通过druid连接池连接数据库并封装查询操做

import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;public class DBUtils {static Connection conn;static PreparedStatement presql;static ResultSet rs;static String selectsql="SELECT * FROM student where name=? ";static String n;//namepublic static void getconnection() {//1.从类路径下加载配置文件,获取一个输入流。如果不指定路径,默认是读取同一个包下资源文件InputStream inputStream = DBUtils.class.getResourceAsStream("/druid.properties");//2.使用Properties对象的方法将配置文件中属性加载到Properties对象中Properties properties = new Properties();//加载了配置文件中所有的属性try {properties.load(inputStream);} catch (IOException e) {e.printStackTrace();}//3.通过druid的工厂类创建连接池DataSource dataSource = null;try {dataSource = DruidDataSourceFactory.createDataSource(properties);} catch (Exception e) {e.printStackTrace();}//4.从连接池中获取连接对象try {conn=dataSource.getConnection();} catch (SQLException e) {e.printStackTrace();}}//编写select操作方法public static ResultSet select(String a){//调用上面自己封装的getconnection方法连接数据库getconnection();//将测试类中传入的name参数赋值给nn=a;//通过预处理对象处理sql语句try {presql=conn.prepareStatement(selectsql);presql.setString(1,n);} catch (SQLException e) {e.printStackTrace();}//获取结果集对象try {rs=presql.executeQuery();} catch (SQLException e) {e.printStackTrace();}//返回结果集对象return rs;}}

(4)编写测试类

import org.junit.Test;
import java.sql.ResultSet;
import java.sql.SQLException;public class test {@Testpublic void test2() throws SQLException {//通过工具类得到结果集对象ResultSet res=DBUtils.select("dwd");//输出当前连接池中我们所用的连接对象System.out.println(DBUtils.conn);while (res.next()){//打印我们从数据库中得到的数据System.out.println("名字:"+res.getString("name"));System.out.println("密码:"+res.getString("password"));System.out.println("成绩:"+res.getString("score"));}//关闭连接,连接对象回到连接池DBUtils.conn.close();}
}

(5)运行结果在这里插入图片描述



http://chatgpt.dhexx.cn/article/fAUXqKkr.shtml

相关文章

【Druid 连接池】 学习~快速 掌握连接池基本原理

文章目录 前言提出问题&#xff1a;一、Druid连接池简述 再次提出问题 &#xff1a;二、初始化连接池三、了解三个核心成员&#xff08;三大线程&#xff09;四、获取连接五、探活&#xff08;连接池连接健康的检查机制&#xff09; 前言 翻遍了各个大佬发的博客整理出来的学习…

Druid连接池的基本配置与使用

Druid简介 Druid是阿里巴巴的开源连接池组件&#xff0c;是世界上最好的连接池之一。Druid能对数据库连接进行有效管理和重用&#xff0c;最大化程序执行的效率。连接池负责创建和管理连接&#xff0c;程序只负责取用与归还。 以下是我画的示意图&#xff1a; 下面我来给大家…

MySQL快捷键注释

MySQL语句注释快捷键显示为CtrlOemQuestion&#xff0c;对应于我们键盘上的是Ctrl&#xff1f;

Mysql 增加表注释

关注微信公共号&#xff1a;小程在线 关注CSDN博客&#xff1a;程志伟的博客 方法一&#xff1a; mysql添加表注释 ALTER TABLE 表名 COMMENT 注释字段; 实例&#xff1a; alter table test comment 测试表&#xff1b; 方法二&#xff1a; 在创建表的时候直接增加表注释…

mysql语句中的注释方法_MySQL语句注释方式简介

MySQL支持三种注释方式&#xff1a; 1.从‘#字符从行尾。 2.从‘-- 序列到行尾。请注意‘-- (双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如空格、tab、换行符等等)。 3.从/*序列到后面的*/序列。结束序列不一定在同一行中&#xff0c;因此该语法允许注释跨越多行…

MySQL注释:单行注释和多行注释,快进来理解

单行注释与多行注释 单行注释多行注释 单行注释 单行注释可以使用#注释符&#xff0c;#注释符后直接加注释内容 #注释内容单行注释可以使用- -注释符&#xff0c;- -注释符后需要加一个空格&#xff0c;注释才能生效。 -- 注释内容#和–的区别就是&#xff1a;#后面直接加注…

Mysql注释

Mysql注释 MySQL服务器支持3种注释风格&#xff1a; 从‘#’字符从行尾。 从‘-- ’序列到行尾。请注意‘-- ’(双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如空格、tab、换行符等等)。该语法与标准SQL注释语法稍有不同。 从/*序…

mysql注释乱码问题_mysql注释是中文乱码怎么办

mysql注释是中文乱码的解决办法&#xff1a;首先用“show variables like”命令查看数据库与服务端的字符集设置&#xff1b;然后执行语句为“set collation_serverutf8_general_ci;”即可。 mysql表注释乱码 问题 执行语句: alter table TABLE_XXX comment ‘中文号’; 结果: …

wepy开发小程序eslint报错error 'getApp' is not defined no-undef

wepy开发小程序使用getApp().globalData保存全局数据很方便&#xff0c;但是会在控制台看到很多报错&#xff1a;“error getApp is not defined no-undef”&#xff0c;这是eslint报错。 解决办法&#xff1a;在.eslintrc.js文件中加入 globals: { getApp: true } 转载于:ht…

微信小程序 关于获取用户信息的一种方法 “this.setData与getApp().globalData.userInfo“

获取用户信息&#xff1a;this.setData和getApp().globalData.userInfo; 最开始的WXML文件中&#xff0c;我们写下页面结构代码如下&#xff1a; <image class"userinfo-avatar" src"{{userInfo.avatarUrl}}" mode"cover"></image>…

JS交互逻辑——获取页面数据{{}}和全局数据const app = getApp()

JS交互逻辑 在小程序里边&#xff0c;我们就通过编写 JS 脚本文件来处理用户的操作 app.js中最外层需要App({}) &#xff0c;该函数是微信平台提供的api App({// 全局数据&#xff0c;可以在所有的子页面中使用mydata: {n: 100} }) // 页面获取全局数据的方式,app表示小程序的…

微信小程序getApp().globalData.user无法获取值

一、debug过程 在进行微信小程序的开发过程中&#xff0c;我利用如下代码获取全局变量中的username的值&#xff0c;但其结果缺如图中所示的只向数据库中存入了对应的类型即object Object。 username: getApp().globalData.user.username, 数据库结果 其中&#xff0c;全局变量…

微信小程序const app=getApp()的作用,实现page页面获取全局数据

app.js的作用 app.js是整个小程序项目的入口文件&#xff0c; 如果小程序要运行&#xff0c;第一个被执行的文件就是app.js&#xff0c;第一个被执行的代码是app.js中的onLaunch方法 在app.js中可以书写小程序的全局业务逻辑 在app.js里面&#xff0c;写上一些需要的东西&am…

uniapp中的getApp().globalDate.

获取全局变量&#xff1a; getApp().globalDate1.uni-app 在app.vue文件export default里面定义globalData&#xff0c;在其他文件则用getApp&#xff08;&#xff09;.globalData获取 2.在当前文件&#xff08;app.vue&#xff09;里面获取globalData需要用this.$options.glob…

解释微信小程序const app=getApp()的作用

const appgetApp()用来获取全局变量 const appgetApp()这就话通常在pages下的页面的js中写 来调用app.js中的globalData{} 直白一点说就是在app.js的globalData{}里写的东西 在其他页面的js的onshow中可以直接调用 例&#xff1a;

微信小程序 app=getApp()公共变量在页面间传值技巧。

1.公共变量 在开发过程中&#xff0c;避免不了会使用公共变量&#xff0c;记录共享对象状态、数据最简单的方式就是创建创建公共变量&#xff1b; 当业务逻辑变多&#xff0c;还采用这种思想就会变得危险&#xff0c;代码逻辑变得不清晰&#xff0c;慢慢就有一种代码坏味道。 …

【uniapp】uniapp的globalData以及getApp():

文章目录 一、说明文档&#xff1a;二、使用&#xff1a; 一、说明文档&#xff1a; 【官方文档】https://uniapp.dcloud.net.cn/collocation/App.html#globaldata 二、使用&#xff1a;

getapp.php,getApp.php

下载RiseClub $iosUrl https://itunes.apple.com/cn/app/riseclub/id869364498?lzh&mt8; $yingyongbao http://a.app.qq.com/o/simple.jsp?pkgnamecom.rusi.club&g_f994302; $androidUrl http://club.risecenter.com/riseclub.v1.1.2.apk; if(isset($_GET[go2Andr…

微信小程序App()方法与getApp()方法

微信小程序App()方法与getApp()方法 二者含义: App()有以下作用&#xff1a; 注册一个小程序小程序的入口方法 getApp()主要用于获取全局对象&#xff0c;然后进行全局变量和全局方法的使用 例如&#xff1a; app.js 中的 App() App({onLaunch: function(options) {cons…

《算法导论》+第四版++答案

在有关算法的书中&#xff0c;有一些叙述非常严谨&#xff0c;但不够全面&#xff1b;另一些涉及了大量的题材&#xff0c;但又缺乏严谨性。本书将严谨性和全面性融为一体&#xff0c;深入讨论各类算法&#xff0c;并着力使这些算法的设计和分析能为各个层次的读者接受。全书各…