当前位置: 首页 > news >正文

JDBC与Druid连接池

1 什么是jdbc?

JDBC(java database connectivity )是Java语言连接操作关系型数据库的一套解决方案,屏蔽了底层各数据库不同的差异。 具体是通过sun公司定义的统一的一套API【标准接口】来实现解决差异, 具体实现是各大数据库厂商来实现的,即各个不同的驱动jar包。
java----jdbc统一接口----各关系型数据库

2JDBC重要的API

2.1 DriverManager(驱动管理)

注册驱动; DriverManager.registerManager()
获得数据库连接;DriverManager.getConnection();

2.2 Connection(连接)

获取执行sql语句的对象-- Connection.createStatement()  获得普通执行sql对象Statement-- Connection.prepareStatement(sql) 预编译sql的sql执行对象PreparedStatement,防止sql注入-- Connection.prepareCall(sql) 执行存储过程的对象CallableStatement
管理事务
-- Connection.setAutoCommit(boolean autoCommit) autoCommit=true时 事务自动提交,false时手动开启事务
-- Connection.commit() 提交事务
-- Connection.rollback() 回滚事务

2.3 ResultSet (DQL语句执行后封装的结果集对象)

  next() 判断是否存在有效数据行getXXX(String ColumnName) 根据列名获得数据getXXX(int columnIndex) 根据列索引获得数据  索引从1开始

2.4 PreparedStatement (预编译sql执行对象)

预编译并执行sql
使用?占位符去替换sql中的变量,防止sql注入
设置变量setXXX(i,j) XXX为变量类型 i为出现?的位置 j为?的值PreparedStatement的好处
预编译sql语句,性能更高【如果使用的模板一样,则只需要检查一次】
对敏感sql语句进行转义处理,防止sql注入问题

3 代码示例

连接Mysql8的数据库,需要的引入的包mysql-connector-java-8.0.28.jar

操作的数据表如下数据表

public class JDBCDemo1 {public static void main(String[] args) throws Exception {//获得MySQL的驱动Class.forName("com.mysql.cj.jdbc.Driver");//设置连接数据库的信息//连接本地的face数据库String connectUrl="jdbc:mysql://localhost:3306/face?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT";//账号String user="root";//连接密码String password="Liuyifei@@";//获得ConnectionConnection connection= DriverManager.getConnection(connectUrl,user,password);//查询操作//执行sql语句String sql="select * from ip ";//获得执行sql的statement对象Statement statement = connection.createStatement();//执行sql语句获得结果集ResultSet resultSet = statement.executeQuery(sql);//遍历结果集while (resultSet.next()){//打印输出IP与门岗信息
System.out.println(resultSet.getString("ip")+"=="+resultSet.getString("position"));}//变量使用占位符给替换,防止sql注入问题String sql="update ip set is_delete='N' where id=?";//预编译执行sql对象,防止sql注入PreparedStatement preparedStatement = connection.prepareStatement(sql);//给变量赋值 SetXXX(i,j)//XXX为变量的类型//i为变量出现的位置//j为变量的值preparedStatement.setInt(1,4);//执行sql语句boolean execute = preparedStatement.execute();if(execute){System.out.println("success!");}else{System.out.println("failed!");}//关闭连接statement.close();connection.close();}
}

4 数据库连接池

由JDBCDemo1 可知,在执行sql语句之前需要从驱动那获得数据库连接,执行完之后需要手动地关闭数据库连接。当服务中出现多数据操作时,频繁的开闭数据库连接将会大大得影响服务的性能。因此需要对数据库的连接进行额外的处理。

数据库连接池是一个容器,用于管理、分配数据库的连接;
它允许现有的程序重复使用同一个连接,而不是重复创建一个新的连接;
释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连 接遗漏
使用连接池的好处:资源重用,提升系统响应速度,避免数据库连接遗漏

Sun公司提供了一个标准接口DataSource 来定义数据库连接池的基本功能,具体实现由第三方组织来实现这个标准接口.
常见的数据库连接池实现有
DBCP
C3P0
DRUID【阿里巴巴开源的数据库连接池项目,功能强大,性能优秀,是Java语言最好的数据库连接池之一】

/*** 数据库连接池 DRUID连接池* 使用DRUID连接池后,避免原生的DriverManager驱动类来获取数据库连接* 使用的jar包druid-1.1.16* 定义配置文件* 加载配置文件* 获取数据库连接池对象* 获得连接*/
public class ConnectionPool {public static void main(String[] args) throws Exception {Properties prop=new Properties();prop.load(new FileInputStream("src/properties/DruidConnection.Properties"));DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);Connection connection = dataSource.getConnection();System.out.println(connection);//E:\PROJECT\JAVA\Study\JdbcStudySystem.out.println(System.getProperty("user.dir"));//执行sql语句PreparedStatement statement = connection.prepareStatement("insert into uuser(username,password,root,is_delete)values(?,?,?,?)");statement.setString(1,"lyf");statement.setString(2,"lyf");statement.setString(3,"admin");statement.setString(4,"N");statement.execute();}
}

项目结构如下=

项目结构如下

DruidConnection.Properties

## 数据库连接字符串
url=jdbc:mysql://XXXXX:3306/face?useSsl=false&useUnicode=true&serverTimezone=UTC
## 数据库连接账号
username= 账号
## 数据库连接密码
password= 密码
## 数据库连接驱动
classDriver=com.mysql.cj.jdbc.Driver##初始化时建立物理连接的个数
initialSize=5

关于Druid的其他配置信息可查看官方说明 根据实际需求进行配置

Durid配置说明

相关文章:

JDBC与Druid连接池

1 什么是jdbc? JDBC(java database connectivity )是Java语言连接操作关系型数据库的一套解决方案,屏蔽了底层各数据库不同的差异。 具体是通过sun公司定义的统一的一套API【标准接口】来实现解决差异, 具体实现是各大数据库厂商…...

java易错题锦集二

源码 补码 int i 5; int j 10; System.out.println(i ~j);有个公式,-n~n1 另一种解题思路 ~代表对n按位取反 10的源码是: 00000000 00000000 00000000 1010 所以对10按位取反就是 11111111 11111111 11111111 0101 由于计算机中-1表示为 11111111 11111111 111…...

11.hadoop系列之MapReduce框架原理之InputFormat数据输入

我们先简要了解下InputFormat输入数据 1.数据块与数据切片 数据块: Block在HDFS物理上数据分块,默认128M。数据块是HDFS存储数据单位 数据切片: 数据切片只是在逻辑上对输入进行分片,并不会物理上切片存储。数据切片是MapReduce…...

LoadRunner

目录 为什么需要性能测试 性能测试实施流程 常见的性能测试指标 性能测试分类 1、一般性能测试 2、负载测试 3、压力测试 LoadRunner LoadRunner包括三个组件 VUG Controller Analysis 一个网站或者app的性能差,用户的使用体验就会很差 常见的性能问题&a…...

笔试题-2023-芯原-数字前端设计or验证【纯净题目版】

回到首页:2023 数字IC设计秋招复盘——数十家公司笔试题、面试实录 推荐内容:数字IC设计学习比较实用的资料推荐 题目背景 笔试时间:2022.08.28应聘岗位:数字前端设计/验证工程师笔试时长:60min笔试平台:nowcoder牛客网题目类型:企业知识题(2道)、智力题(5题)、技术…...

【软件测试】资深测试工程师说:你真的能做好bug分析吗?

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 bug报告&#xff0c…...

NLP模型检查英语语法错误

当NLP模型产生了语法错误,怎么办?比如,He wants that you send him an email.没关系,现在可以像小时候的英语老师,改作文一样简单。只要装上一个专门纠正语法错误的库就可以,还是毫秒钟就可揪出来的那种。这…...

Echarts的Category轴滑动

Echarts的Category轴滑动 效果,滚轮上下可拖动 配置项 dataZoom: [// {// // disabled: false,// start: 100, //默认为0// end: 80, //默认为100// // startValue: [xArr.length - 1],// // endValue: [xArr.length - 4],// type: slide…...

04 react css上下浮动动画效果

react css上下浮动动画效果html原生实现上下浮动react 实现上下浮动思路分析实现步骤1.引入useRef2.在所属组件内定义—个变量3.在按钮上添加事件4.定义点击事件对window.scrollTo()进行了解:在react中实现效果图:html原生实现上下浮动 我们有一个导向箭…...

关于线程池

是什么? 线程池是一种多线程处理形式 作用: 减少每次获取和结束资源的消耗,提高对资源的利用率。 线程池,顾名思义就是事先创建若干个可执行的线程放入一个容器(池)中,需要的时候从池中获取线程…...

【GPLT 二阶题目集】L2-004 这是二叉搜索树吗?

参考文章:L2-004. 这是二叉搜索树吗?-PAT团体程序设计天梯赛GPLT 作者:柳婼(非常感谢!!!) 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于…...

Python Numpy基础教程

本文是一个关于Python numpy的基础学习教程,其中,Python版本为Python 3.x 什么是Numpy Numpy Numerical Python,它是Python中科学计算的核心库,可以高效的处理多维数组的计算。并且,因为它的许多底层函数是用C语言编…...

常见HTTP请求错误码大全

响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行。 响应码分五种类型,由它们的第一位数字表示: 1xx:信息,请求收到,继续处理 2xx:成功,行为被成功地接受、…...

重保期间如何「快速」构建内容安全治理体系?

国际会议、国家会议、大型活动、节日庆典等重要时期,往往也是国内外各类攻击组织活跃的高峰期,大量政企机构的互联网展示窗口都会成为网络攻击的重要目标。 网络攻击方式不但有常见的SQL注入攻击、DDoS攻击等破坏方式,更有开始向恶意篡改方式…...

用Qt开发的ffmpeg流媒体播放器,支持截图、录像,支持音视频播放,支持本地文件播放、网络流播放

前言 本工程qt用的版本是5.8-32位,ffmpeg用的版本是较新的5.1版本。它支持TCP或UDP方式拉取实时流,实时流我采用的是监控摄像头的RTSP流。音频播放采用的是QAudioOutput,视频经ffmpeg解码并由YUV转RGB后是在QOpenGLWidget下进行渲染显示。本…...

第七节 平台设备驱动

在之前的字符设备程序中驱动程序,我们只要调用open() 函数打开了相应的设备文件,就可以使用read()/write() 函数,通过file_operations 这个文件操作接口来进行硬件的控制。这种驱动开发方式简单直观,但是从软件设计的角度看&#…...

代理模式详解

本文首更于《从零开始手把手教你实现一个简单的RPC框架》 。 1. 代理模式2. 静态代理3. 动态代理 3.1. JDK 动态代理机制 3.1.1. 介绍3.1.2. JDK 动态代理类使用步骤3.1.3. 代码示例 3.2. CGLIB 动态代理机制 3.2.1. 介绍3.2.2. CGLIB 动态代理类使用步骤3.2.3. 代码示例 3.3. …...

根据报告20%的白领在一年内做过副业,你有做副业吗?

现在大部分人收入单一,收入都是来源于本职工作,当没有了工作就没有了收入的来源,而生活压力又很大,各种开支,各种消费。所以很多人想要增加收入来源,增加被动收入,同时通过副业提升自己的价值和…...

第二十三周周报

学习内容: 修改ViTGAN代码 学习时间: 2.3-2.10 学习产出: 现在的效果 可以看到在700k左右fid开始上升,相比vitgan,改的vitgan鉴别器loss有所下降,但是fid没有降下来,最好为23.134&#xf…...

2023年Q1业绩增长背后,迪士尼亟待扭转流媒体亏损困局

重新执掌迪士尼后,鲍勃伊格尔交出了一份表现尚可的“答卷”。 图源:迪士尼 美东时间2023年2月8日,迪士尼披露了2023财年Q1财报,营收为235.1亿美元,同比增长8%;持续经营净利润13亿美元,同比增长11%。受此利…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...