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注入(重要)

小结

相关推荐
年老体衰按不动键盘4 分钟前
快速部署和启动Vue3项目
java·javascript·vue
咖啡啡不加糖9 分钟前
Redis大key产生、排查与优化实践
java·数据库·redis·后端·缓存
liuyang-neu13 分钟前
java内存模型JMM
java·开发语言
UFIT34 分钟前
NoSQL之redis哨兵
java·前端·算法
刘 大 望37 分钟前
数据库-联合查询(内连接外连接),子查询,合并查询
java·数据库·sql·mysql
怀旧,43 分钟前
【数据结构】6. 时间与空间复杂度
java·数据结构·算法
大春儿的试验田1 小时前
Parameter ‘XXX‘ not found. Available parameters are [list, param1]
java
我很好我还能学2 小时前
【面试篇 9】c++生成可执行文件的四个步骤、悬挂指针、define和const区别、c++定义和声明、将引用作为返回值的好处、类的四个缺省函数
开发语言·c++
程序员JerrySUN2 小时前
[特殊字符] 深入理解 Linux 内核进程管理:架构、核心函数与调度机制
java·linux·架构
2302_809798322 小时前
【JavaWeb】Docker项目部署
java·运维·后端·青少年编程·docker·容器