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%。受此利…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

Java数组Arrays操作全攻略
Arrays类的概述 Java中的Arrays类位于java.util包中,提供了一系列静态方法用于操作数组(如排序、搜索、填充、比较等)。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序(sort) 对数组进行升序…...

高抗扰度汽车光耦合器的特性
晶台光电推出的125℃光耦合器系列产品(包括KL357NU、KL3H7U和KL817U),专为高温环境下的汽车应用设计,具备以下核心优势和技术特点: 一、技术特性分析 高温稳定性 采用先进的LED技术和优化的IC设计,确保在…...