JDBC和一下重要的jar包,分层结构

news2024/9/23 12:15:27

系列文章目录

JDBC和方便使用的jar包 

目录

系列文章目录

文章目录

一、JDBC

1.步骤

2.SQL注入

3.SQL注入解决(PreparedStatement)

4.批处理和事务控制

5.连接池

Druid连接池(德鲁伊)

6.封装为工具类

7.ThreadLocal 、小秘书

二、常用的jar包

1.Junit

2.dbutils

3. Lombok

三、分层思想

一、JDBC

JDBC(Java DataBase Connectivity)

Java数据库连接(技术) 也就是通过Java代码,连接到数据库,并可以使用SQL语句,对数据库进 行各种操作的技术。

JDBC是一种规范,他提供了一堆需要实现的接口,由不同的数据库厂商去实现JDBC接口提供jar包,这样就可以直接导入jar包使用实现类去进行与数据库的连接。

1.步骤

一共有六大步骤

注册驱动、获取数据库连接对象、获取数据库操作对象、执行sql语句(executeUpdate、executeQuery)、处理结果集、释放连接


 对于结果集的处理(ResultSet)

next()方法:将光标移到下一行

getXXX(参数):获得指定列的数据,参数可以是数字也可以是列名的字符串

2.SQL注入

sql注入是一种常见的安全漏洞,利用用户输入的数据作为sql查询语句的一部分,从而改变了原始查询语句的意图,绕过身份验证进行恶意操作。

通过’ or这样去进行sql注入

select * from t_user where name='admin' and password='' or
'1'='1'
select * from t_user where name='' OR '1'='1'; -- and
password='test'

3.SQL注入解决(PreparedStatement)

它是Statement的子接口

用PreparedStatement就可以解决sql注入,sql注入是根据sql语句的缺陷进行注入的

PreparedStatment可以进行对sql语句的预编译,然后可以多次使用相同的预编译语句执行不同的参数值

 

具体应用

使用数据库连接对象调用prepareStatement(String sql) 方法进行预编译,获得一个pstm对象

然后进行setXXX(int a ,XXX  s) 进行给sql语句赋值,a代表的是sql语句第几个通配符,后面跟的是添加的数据

4.批处理和事务控制

批处理(Batch):一次操作中执行多条SQL语句,相比于一次执行一条SQL语 句,效率会提高很多。

执行批处理需要在url后加一步操作
#url 最终效果
private String url = "jdbc : mysql : //ip : port/ 数据库名 ?
useServerPrepStmts = true";


默认情况下,在JDBC中执行的DML语句,所产生的事务,都是自动提交的。也 就是说,每执行一条DML语句,所产生的事务就会自动提交。 (也可以是设置回滚到哪里,打断点 SavePoint)

5.连接池

数据库连接池,在系统初始化时创建一定数量数据库连接对象,需要时直接从 池中取出一个空闲对象,用完后并不直接释放掉对象,而是再放到对象池中, 以便下一次对象请求可以直接复用。消除了对象创建和销毁所带来的延迟,从 而提高系统的性能。

常见的连接池:druid、C3P0、DBCP

Druid连接池(德鲁伊)

Druid连接池是阿里巴巴开源的数据库连接池项目 功能强大,性能优秀,是Java语言最好的数据库连接池之一。

Java中定义了一个数据源标准接口 javax.sql.DataSource ,通过它获取到 的数据库连接对象。再借助连接对象调用 close() 方法,不会关闭连接,而是 归还连接到连接池中

druid使用配置文件进行创建数据库连接池,并获得连接

使用properties工具类,调用load方法        

DataSource dataSource = DruidDataSourceFactory . createDataSource ( properties );//利用德鲁伊连接池工厂创建连接池

6.封装为工具类

硬编码的方式使用JDBC连接四要素,进而获取数据库连接对象,扩展性差

在每个JDBC应用程序中都需要去加载配置文件获取数据库连接对象,代码重复

释放资源代码很类似,但过于繁琐,需要简化

为了简化代码使得代码变得优雅,封装了JdbcUtils

提供数据源对象,在静态代码块中进行连接池的创建

提供私有无参构造,提供静态的从数据库连接池中获取连接对象,

关闭资源的封装(可以在归还连接池中加一步设置自动提交的代码)

//JDBC 工具类
public class JdbcUtils {
// 数据源对象
private static DataSource dataSource ;
// 工具类加载时读取配置文件,获取数据源对象
static {
try {
Properties properties = new Properties ();
properties . load ( JdbcUtils . class . getClassLoader (). getResourceAsStream ( "druid.properties" ));
dataSource = DruidDataSourceFactory . createDataSource ( properties );
} catch ( Exception e ) {
e . printStackTrace ();
}
}
// 提供私有无参构造器
private JdbcUtils () {}
// 从数据库连接池中获取连接对象
public static Connection getConnection () throws SQLException
{
return dataSource . getConnection ();
}
// 关闭资源
public static void close ( ResultSet rs , Statement stmt ,
Connection conn ) {
if ( rs != null ) {
try {
rs . close ();
} catch ( SQLException e ) {
e . printStackTrace ();
}
}
if ( stmt != null ) {
try {
stmt . close ();
} catch ( SQLException e ) {
e . printStackTrace ();
}
}
if ( conn != null ) {
try {
conn . close ();
} catch ( SQLException e ) {
e . printStackTrace ();
}
}
}
// 关闭资源方法重载
public static void close ( Statement stmt , Connection conn ) {
close ( null , stmt , conn );
}
}

7.ThreadLocal 、小秘书

本地线程,一个用于向当前线程内存储数据的一个工具类,其本身不存储数据,只是操作当前线程内数据的工具类

特点:线程内数据共享,多线程之间数据隔离

对于一个线程上来讲,用的应该是同一个数据库的连接对象,而不是每一次去进行连接

这样就可以抽取出一个小秘书,利用本地线程的特点,小秘书从连接池拿一个conn对象放入到ThreadLocal中。

 

每次使用完记得要把ThreadLocal进行一次remove操作,否则会导致内存泄漏。 

二、常用的jar包

1.Junit

 

2.dbutils

QueryRunner()有无参和有参的

无参需要自己维护,自己关闭

有参的参数传递连接池对象,DateSource,方法中就可以不传入conn对象

 


 结果集的处理

 

 

3. Lombok

一些注解

@Data:用这个注解可以省去代码中大量的get()、 set()、 toString()等方法;

@Data : 注在类上,提供类的get、set、equals、hashCode、canEqual、toString方法
@AllArgsConstructor : 注在类上,提供类的全参构造
@NoArgsConstructor : 注在类上,提供类的无参构造
@Setter : 注在属性上,提供 set 方法
@Getter : 注在属性上,提供 get 方法
@EqualsAndHashCode : 注在类上,提供对应的 equals 和 hashCode 方法
@Log4j/@Slf4j : 注在类上,提供对应的 Logger 对象,变量名为 log

三、分层思想

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2157496.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大语言模型(LLM)入门学习路线图

Github项目上有一个大语言模型学习路线笔记,它全面涵盖了大语言模型的所需的基础知识学习,LLM前沿算法和架构,以及如何将大语言模型进行工程化实践。这份资料是初学者或有一定基础的开发/算法人员入门活深入大型语言模型学习的优秀参考。这份…

【FPGA】FPGA芯片结构

目录 1 可编程输出/输出单元(IOB)2 可配置逻辑块(CLB)3 数字时钟管理模块(DCM)4 嵌入式块存储器(BRAM)5 布线资源6 内嵌功能模块(专用IP单元)6.1 PLL&#xf…

SpringBoot简易商品管理系统

> 这是一个基于SpringBootThymeleaf实现的简易商品管理系统。 > 包含基本的登录/注册与商品管理功能。 > 界面简洁美观,代码结构清晰,适用于JAVA初学者在此基础上进行二次开发。 一、项目演示 二、技术框架 框架描述Spring Boot容器管理 S…

CV之OCR:GOT-OCR2.0的简介、安装和使用方法、案例应用之详细攻略

CV之OCR:GOT-OCR2.0的简介、安装和使用方法、案例应用之详细攻略 目录 GOT-OCR2.0的简介 1、更新 GOT-OCR2.0的安装和使用方法 1、安装 安装环境cuda11.8torch2.0.1 安装包 安装Flash-Attention GOT权重:1.43G 2、演示 3、训练 4、评估 GOT-…

Tomcat靶场攻略

一.CVE-2017-12615 1.首页抓包,修改为 PUT 方式提交 ,将jsp木马写到数据包中 2.哥斯拉默认秘钥连接 二.后台弱⼝令部署war包 1.制作WAR包,上传 将JSP⽊⻢压缩为ZIP格式,然后修改后缀为war 2.文件上传成功后,默认会在网站根目录下生成和wa…

使用centos7搭建wiki论坛,使用nginx网站来搭建wiki负载均衡,反向代理。

1.安装一个wget,进入目录opt下 #安装wget yum -y install wget#进入目录/opt/下面 cd /opt/2.获取 mysql8.0 rpm包,安装mysql8.0,安装mysql-server,yum会自动下载所需安装及依赖包. #获取 mysql8.0 rpm包 wget https://dev.mysql.com/get/mysql80-comm…

2024人工智能结课作业-DFS/BFS/Astar解决数码问题

1 深度优先遍历搜索(DFS) 1.1算法介绍 深度优先搜索算法(Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发…

基于SSM的“在线CRM管理系统”的设计与实现(源码+数据库+文档+开题报告)

基于SSM的“在线CRM管理系统”的设计与实现(源码数据库文档开题报告) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 总体功能模块图 登录页面 后台管理页面 产品信息页面 客…

【Android】BottomSheet基本用法总结(BottomSheetDialog,BottomSheetDialogFragment)

BottomSheet BottomSheet 是一种位于屏幕底部的面板,用于显示附加内容或选项。提供了从屏幕底部向上滑动显示内容的交互方式。这种设计模式在 Material Design 中被广泛推荐,因为它可以提供一种优雅且不干扰主屏幕内容的方式来展示额外信息或操作。 具体…

大型综合医院供配电系统设计

摘要:众所周知,医院供配电系统关系着整个医院的正常运行,一旦出现故障将会对病患的安全造成威胁。基于此,本文就大型综合医院供配电系统设计进行深入探讨,以期为其他类似医院建筑供配电系统设计提供借鉴。 关键词&…

代理模式详解:控制对象访问的利器

代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。代理模式通常用于延迟对象的创建、控制对对象的访问或在访问对象时添加一些额外的操作。 代理模式通过引入一个代理对象来控制对目标对象的访…

超详细超实用!!!AI编程之cursor配置中文(一)

云风网 云风笔记 云风知识库 一、配置中文扩展 打开扩展,搜索chinese,安装chinese(simplified) 简体中文语言包,重启即可 二、配置中文方法二 使用快捷键组合【CtrlShiftp】,在搜索框中输入configure display language,选择中文也可配置中文 三、配置…

九、成功版--windows上安装artifactory配置postgressql

centos上搞不定,windows上搞定了 现阶段是想用java写程序控制制品库,等以后研究多了需要写一些脚本的时候,在研究linux上安装artifactory(公司就用的linux安装的配置mysql,有空对着配一下linux的) 源码地…

【实证数据】国家信息消费试点城市(2000年-2023年)

数据说明:2013年,国务院发布《促进信息消费若干意见》,旨在激发需求、拓宽市场及丰富服务内容。随后,工信部启动信息消费试点城市建设,分两批确立104个试点区域,旨在通过试点引领,促进信息消费增…

STM32—I2C通信外设

1.I2C外设简介 STM32内部集成了硬件I2C收发电路,可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,减轻CPU的负担支持多主机模型(可变多主机)支持7位/10位地址模式(11110......)支持不同的通…

2024好评的开放式耳机排行榜10强?五款开放式蓝牙耳机推荐!

​开放式耳机目前非常流行,它们的设计不侵入耳道,长时间佩戴也不会感到不适,同时还能维护耳部卫生,这使得它们特别受到运动爱好者和耳机发烧友的喜爱。然而,市场上的开放式耳机品牌众多,质量参差不齐&#…

对HttpServletRequest中的Header进行增删

HttpServletRequest 没有提供修改/删除的 Api HttpServletRequest中定义的对 Header 的操作全是只读,没有修改。代码实现如下: public interface HttpServletRequest extends ServletRequest {...public long getDateHeader(String name);public String…

Isaac Sim 4.2.0 Windows版本打开报 fbgemm.dll 加载错误

方案一:下载缺少的dll复制到目录里即可 可以看到后台命令窗口出现了错误,发生在import pytorch的时候,根据提示,是因为fbgemm.dll缺少依赖,导致加载异常,一般情况是缺少 libomp140.x86_64.dll 这个文件&am…

前端工程化4:从0到1构建完整的前端监控平台

前言 一套完整的前端监控系统的主要部分: 数据上报方式数据上送时机性能数据采集错误数据采集用户行为采集定制化指标监控sdk 监控的目的: 一、数据上报方式 本文的方案是,优先navigator.sendBeacon,降级使用1x1像素gif图片…

C语言 | Leetcode C语言题解之第419题棋盘上的战舰

题目&#xff1a; 题解&#xff1a; int countBattleships(char** board, int boardSize, int* boardColSize){int row boardSize;int col boardColSize[0];int ans 0;for (int i 0; i < row; i) {for (int j 0; j < col; j) {if (board[i][j] X) {if (i > 0 &…