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报告,…...

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…...

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

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...