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包
根据如图数据来登录
账户密码正确能正常登录
如果输入一个错误的账户密码呢
也是成功登录,这是为什么呢,将账户密码代入看看