java全栈day18--Web后端实战(java操作数据库2)

前言:在上节入门程序当中我们见到了JDBC所提供的API,本节来详细说明一下。

一、JDBC--API详解

1.1DriverManager(驱动管理器)

回顾:作用获取连接,调用它里面的getConnection。即如下

作用

1.注册驱动解析

思考: 注册驱动跟DriverManager有什么关系?

解答:根据注册驱动里面的核心(原理)。其实注册驱动严格来说需要调用DriverManager里面的一个方法叫DriverManager.**registerDriver(...),**但是我们只调用class.forname将指定的类加载在JDM当中,就完成注册驱动了,没有调用上面那个代码。因为Driver类源码里面有个静态方法包含了,这个静态方法在类加载的时候就运行了。

补充:class.forname可以省略的

运行结果

思考:这又是为啥呢?咱们又省了一步

首先精确找到咱们引入的jar包

确定后发现驱动类

往上走能找到一个META-INF文件夹,其中包含了咱们需要的内容。在java当中提供了一个机制,如果你在jar包当中定义了一个META-INT文件,下面有个services,然后这块通过它的接口名字定义了这么一个文件的话,它会自动加载到这个文件当中所定义的那个类。(前提的需要jar包中定义了这个文件才能用)(有点绕,建议还是不省略哈哈)

2.获取数据库连接解析

小结

1.2 Connection(连接对象) & Statement(执行对象)

Connection 的作用:获取执行 SQL 的对象

1.执行普通 SQL 对象 Statement : connection.createStatement()

2.执行预编译 SQL 对象 PreparedStatement : connection.preparedStatement()

Statement 的作用:执行 SQL

1.执行 DDL 、 DML 语句: executeUpdate(sql) ; 如果是执行 DML 语句完毕,返回值 int 代表 DML 语句影响的函数。

小结

2.执行 SQL 语句: executeQuery(sql) ; 返回值为 ResultSet ,里面封装了查询结果。

1.3 ResultSet (结果集)

以需求为例来演示

如何获取里面的数据

扩展:我们模拟登录操作,不可能把账户密码写死,应该是用户输入是什么,我们就根据什么来查

修改如下(这两个注解我忘记了,需要大家课外补充)

小结

1.4 PreparedStatement

作用

预编译 SQL 语句并执行,可以防止 SQL 注入问题。

什么是SQL注入?

是sql攻击当中的一种,是常见的问题。

SQL 注入

通过控制输入来修改事先定义好的 SQL 语句,以达到执行代码对服务器进行攻击的方法。

模拟演示,第一次接触有点东西说不准

先导入两个jar包,再运行jar包

根据如图数据来登录

账户密码正确能正常登录

如果输入一个错误的账户密码呢

也是成功登录,这是为什么呢,将账户密码代入看看

解决SQL注入(重要)

小结

相关推荐
腾渊信息科技公司14 分钟前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地1 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
段一凡-华北理工大学1 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
Ljwuhe2 小时前
C++——多态
开发语言·c++
心平气和量大福大2 小时前
C#-WPF-Window主窗体
开发语言·c#·wpf
莫逸风4 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
从零开始的代码生活_4 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸4 小时前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++
z123456789864 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
GIS阵地4 小时前
QgsSingleBandPseudoColorRenderer 完整详解(QGIS 3.40.13 C++)
开发语言·前端·c++·qt·qgis