JDBC简介
JDBC定义:
简单地说,JDBC就是为多种关系数据库提供统一访问同时也是程序与数据库连接的一个中间件,起着桥梁的作用。
客户端连接服务端
无jdbc
- 没有jdbc的时候,数据库有自己的连接驱动的方式
缺点:
1.不知道不同数据库的解析方式和操作方式
2.代码量大,比较繁琐后期维护麻烦
3.由于解析方式不同和操作方式不同,每个数据库都要协一套代码
4.数据库与数据库之间的切换比较麻烦
有jdbc
- 使用jdbc的时候
我们只需要编写一套程序可以连接不同的数据库而且数据库之间切换比较方便
jdbc常见的类和接口
一个类:
DriverManager类:驱动管理器类 专门注册驱动的
三个接口:
| 名字 | 描述和作用 |
|---|---|
| Connection接口 | 连接对象 就是建立与数据库之间的连接 |
| Statement接口 | SQl编译器 像数据库发送并执行sql语句的 |
| ResultSet接口 | 查询结果集 执行查询操作的时候返回的结果集行进行处理 |
入门案例
接下来写一个简单地入门案例
使用jdbc操作数据库有六步,需要记住
| 步骤 | 描述 |
|---|---|
| 1 | 注册驱动 |
| 2 | 获取连接对象 |
| 3 | 创建执行sql语句的连接对象 |
| 4 | 执行sql语句 |
| 5 | 处理结果集 |
| 6 | 释放资源 |
代码示例
1 | public static void main(String[] args) throws Exception { |
jdbc实现增删改查
其中增删改使用的方法是executeUpdate,查询使用的方法是executeQuery
增
1 | //增加 |
删
1 | //删除 |
改
1 | //修改 |
查
查询先创建一个实体类 User 和表名一样,而且查询的结果需要放在一个集合当中进行遍历
1 | package com.ujiuye.pojo; |
1 | //查询 |
sql注入问题
在查询的时候使用createStatement来执行sql语句的连接对象的时候就会出现sql注入问题
通过一个案例来引出sql注入问题
先对jdbc重复要写的步骤进行抽取,抽取为JDBCUtils类
其中rs, psvm, conn是查询,执行sql语句和获取sql连接对象,如果没有某个值就用null代替
1 | package com.ujiuye.utils; |
接着写主要逻辑内容
1 | public static void main(String[] args) throws Exception { |
在以上案例当中,如果正确输入用户名,但是在输入密码的时候后面跟上'or' 1=1就会导致登录也会成功,这就和我们预期的效果不一样了,这就称之为sql注入问题
为什么会出现sql注入问题
当我们使用statement接口时, 会将控制台输入的字符串与sql语句进行拼接, 拼接时把字符串中的or当做了逻辑运算符进行处理, 此时, or后边的1=1是恒成立的, 所以就失去了账号和密码登录的功能, 无论你的账号和密码怎么输入, 都是可以正常登录。
解决SQL注入问题:
需要将statement接口更换为preparedstatement接口。因为用preparedstatement会将sql语句预编译,所以就不会有or的问题。
用preparedstatement的时候直接在执行sql语句的连接对象的时候就把sql语句写了,并且用?占位,然后再用set方法进行赋值,1代表第一个?,2代表第二个?,然后执行executeQuery方法进行查询,获取的时候用next的方法进行判断,如有用get方法获取到并输出,并且next就会去判断下一个位置有没有值。
1 | public static void main(String[] args) throws Exception { |
PreparedStatement常见方法的使用
| 方法 | 描述 |
|---|---|
| setInt(int index,int value) | 为?占位符,赋予int值 |
| setString(int index,String value) | 为?占位符,赋予String值 |
| executeQuery() | 执行查询的SQL语句 |
| executeUpdate() | 执行更新的SQL语句。 |
PreparedStatement的增删改查操作
增
- 增加一条数据
1 |
|
- 新增多条
1 | //新增多条 |
改
1 | //修改 |
删
1 | //删除 |
查
1 | //查询 |
需要的jar包
链接:https://pan.baidu.com/s/1_nqg99Fb83FA1KaFXsip_g
提取码:1314
复制这段内容后打开百度网盘手机App,操作更方便哦

