Java-JDBC【之】JDBC概述、获取连接、操作流程、SQL注入问题与解决、查询解析ResultSet

1.JDBC概述

  • JDBC(Java Database Connectivity)
    JDBC是Java官方提供的,是一套用于操作数据库的接口,接口由不同的数据库厂商来提供驱动jar包
    而对于开发人员来说,引入驱动后,只需要面向接口API编程,无需考虑内部实现
  • JDBC(Java Database Connectivity)
    1.独立于数据库管理系统存在的、一组操作数据库的公共API接口
    2.访问不同的数据库,除了引入驱动包不一样外,操作流程是一致的
    3.开发者,面向接口API编程,无需考虑内部实现,加快开发过程

2.操作流程

1.初始化项目,导入驱动jar包

  • 两个包 mysql、junit
    在这里插入图片描述

2.加载驱动类

  • 加载驱动:加载 JDBC 驱动需调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名
  • 驱动包内部默认加载:mysql-connector-java META-INF\services\java.sql.Driver(com.mysql.cj.jdbc.Driver)
  • 一般主动指定 Class.forName(“com.mysql.cj.jdbc.Driver”)
  • Class.forName的加载机制,是类加载时,会执行静态代码块

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.创建数据库连接对象Connection

  • 创建数据库连接需要三个参数
  • 1.URL:jdbc:mysql://127.0.0.1:3306/abl?user=root
    由三部分组成,协议:jdbc 子协议:mysql 名称:127.0.0.1:3306/abl
    问号 ?后可携带参数
  • 2.用户名 和 密码 (user,password)

在这里插入图片描述
在这里插入图片描述

4.创建Statement (SQL注入问题,在下面解决)

  • Statement:用于执行 SQL 语句并返回它所生成结果的对象。
    在这里插入图片描述

5.执行SQL

在这里插入图片描述

6.解析查询对象ResultSet

在这里插入图片描述
在这里插入图片描述

7.关闭连接 ResultSet 、Statement 、Connection

在这里插入图片描述

3.SQL注入问题与解决(Statement 、PreparedStatement)

3.1.模拟SQL注入

  • 通过字符串拼SQL的形式,存在这种SQL注入问题
  • 账号是对的,但是密码随便输入,最后只需要加上 or '1' = '1' ,相当于添加了判断条件,这样就满足整体条件为 true返回查询信息
    在这里插入图片描述

3.2.PreparedStatement解决

  • PreparedStatement 将SQL进行预编译,将传入的参数认为是?占位符的内容,参数不会被解析为表达式
  • 和上面同样的输入,最终经过预编译后,得到的字符串为 select id,a_account from a_user where a_account = '001' and a_password ='999999 or ''1'' = ''1'''
  • 如此,就通过PreparedStatement,解决了预编译问题
    在这里插入图片描述

3.3.Statement 与 PreparedStatement

  • Statement
    • 1.表示执行一条 SQL 语句
    • 2.数据库无法提供优化,每执行一次都要对传入的语句编译一次
    • 3.存在SQL注入问题
    • 4.字符串拼餐,SQL过长不易阅读
  • PreparedStatement
    • 1.PreparedStatement 接口是 Statement 的子接口,它表示一条预编译过的 SQL 语句
    • 2.PreparedStatement 对象所代表的 SQL 语句中,参数用问号(?)来表示。设置参数值时,下标索引从1开始
    • 3.数据库会对预编译语句提供性能优化。数据库会缓存预编译语句,重复调用时不需要二次编译,只要将参数直接传入编译过的语句执行代码中就会得到执行。
    • 4.PreparedStatement 可以防止 SQL 注入
    • 5.提高代码的可读性和可维护性

4.完整源码

《目录:Java-JDBC学习》

《幕》

  • 留白 —<老吉>
  • ~ 今 ~ ❀ ~ ❀❀❀❀❀❀❀❀❀❀ ❀❀❀❀❀❀❀❀❀❀ ❀❀❀❀❀❀❀
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑鱼村王师傅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值