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

Java操作数据库(JDBC)

一:JDBC概述

简单来说就是JDBC是一种接口规范,各个厂商要实现这个接口的实现类,我们用各个厂商写好的实现类来连接他们的数据库

二:连接数据库

1:先下载连接数据库的jar包

Maven Repository: Search/Browse/Explore

在这个链接中搜索mysql,下载第二个,版本号要对应

2:导入jar包

3:连接数据库

所有类型的数据库都是以下步骤

1:加载驱动

2:获取连接对象(连接哪个厂商的数据库,以及连接哪个数据库)

3:获取SQL语句的对象

4:编写SQL语句

5:利用SQL语句的对象执行编写的SQL语句

代码如下:

三:JDBC实现数据库的增删改查

1:对数据进行增加

2:对数据进行删除

3:对数据进行修改

4:对数据进行查找

四:SQL注入漏洞

Statement对象

通过改变SQL注入的语句的逻辑来实现登录

例如:

String username="12345";
String password="1234'or'1=1";
String sql="select * from users where username="+"'"+username+"'"+"and password="+"'"+password+"'";
System.out.println(sql);

改变sql语句的逻辑实现登录

五:利用preparedStatement对象来拼接字符串执行SQL语句

利用preparedStatement对象解决了SQL注入的改变逻辑的问题

代码如下:

我们传入的参数都加上''通过转义字符来转的,这样就避免的改变sql语句的逻辑实现登录

六:Statement对象和preparedStatement对象的区别

1:preparedStatement是Statement的子类

2:Statement每次执行SQL语句时都要对SQL语句进行校验和编译,preparedStatement创建对象的时候就以及对SQL语句进行校验和编译,执行的时候就不需要在进行校验和编译了,所以preparedStatement对象只需要校验和编译一次,一个是执行的时候把SQL语句传进去,一个是创建对象的时候就把SQL语句传进去了

3:Statement可以改变SQL语句的逻辑,preparedStatement不能改变SQL语句的逻辑

七:使用DAO来封装操作数据库的步骤

业务逻辑:

entity:是和表对应的,一个entity对象代表表中一行数据

Mapper:表的解释器,把查询表中的每一行数据都封装到entity对象当中(有几行封装几个entity对象)

DAD:是操作数据库增删改查

参数1:要传入sql语句,以及对应的

参数2:要传入表的解析器

参数3:要传入sql语句的参数

遍历结果集利用Mapper解析器把结果解析并封装到entity对象当中

最后用list集合把entity对象封装到里面,这样一张表的数据就封装完成了

代码实现

1:我们先把连接数据库的步骤和关闭资源的步骤封装成一个工具类,这样我们用的时候直接取就可以了

2:把表的数据字段封装到Entity类当中

3:Mapper:表的解释器,把查询表中的每一行数据都封装到entity对象当中(有几行封装几个entity对象)

写一个接口统一规划,里面的内容让实现类来写

他的实现类

这样做的好处函数统一规范化,里面内容由各个的实现类来编写

4:我们写操作数据库的类(增删改查)

增删改:

查:

代码解释:

1:利用工具类获取连接对象并获取PreparedStatement对象并传入sql语句

第一个参数是sql语句

2:把sql语句的参数添加进去使sql语句完整

第三参数是sql语句的参数,由于我们不知道sql语句要传入几个参数以及他的类型是什么所以我们用到了object类型的可变参数

3:执行sql语句并返回结果集

4:遍历结果集,把每一行的数据都封装到Entity对象当中,并增加到集合当中

第二个参数是解析器,负责把结果集的数据封装到Entity对象当中并返回Entity对象(entity:是和表对应的,一个entity对象代表表中一行数据)

5:关闭资源,并返回集合

相关文章:

  • C++异步并发支持库future
  • FPGA前瞻篇-组合逻辑电路设计-多路复用器
  • 云原生--核心组件-容器篇-3-Docker核心之-镜像
  • 我是如何用AI编程制作一个AI表情包生成的小程序
  • 大模型微调与蒸馏的差异性与相似性分析
  • (四) 实战Trae 编译调试C++项目(以minidocx为例)
  • 【学习】Codeforces Round 786 (Div. 3)G. Remove Directed Edges
  • strcmp()在C语言中怎么用(附带实例)
  • .NET8 依赖注入组件
  • day003-重置密码
  • React 与 Vue 的区别:你会选择哪个框架呢
  • 构建智能风控引擎的全流程设计指南
  • JDK环境变量
  • Spring Boot 支持政策
  • 综述类论文读后报告——重庆大学《深度学习在人类活动识别中的应用综述》
  • 第一部分:网页的骨架 —— HTML
  • 【教学类-102-19】蝴蝶三色图作品1——卡纸蝴蝶(滴颜料按压对称花纹)A4横版最大号22.85CM
  • 做的一些题目的答案和自己的一些思考
  • 【WLAN】华为无线AC双机热备负载分担—双链路热备份
  • 驱动汽车供应链数字化转型的标杆解决方案:全星研发项目管理APQP软件系统:
  • 兵韬志略|美菲“肩并肩”军演超越传统范畴,凸显防务合作重大转型
  • 全球首台环形CT直线加速器在沪正式开机,系我国自主研发
  • 重新认识中国女性|婚姻,古代传统家庭再生产的根本之道
  • 湖南娄底市长曾超群,已任娄底市委书记
  • 单位被裁定补缴12年社保,滞纳金该谁出?
  • 铜钴巨头洛阳钼业一季度净利润同比大增九成,最新宣布超30亿元收购黄金资产