栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间:发布时间: 百科书网 趣学号

Java-JDBC【之】JDBC概述、获取连接、操作流程、SQL注入问题与解决、查询解析ResultSet
  • 1.JDBC概述
  • 2.操作流程
    • 1.初始化项目,导入`驱动jar包`
    • 2.加载驱动类
    • 3.创建数据库连接对象`Connection`
    • 4.创建`Statement` (SQL注入问题,在下面解决)
    • 5.执行SQL
    • 6.解析查询对象`ResultSet`
    • 7.关闭连接 `ResultSet 、Statement 、Connection`
  • 3.SQL注入问题与解决(Statement 、PreparedStatement)
    • 3.1.模拟SQL注入
    • 3.2.PreparedStatement解决
    • 3.3.Statement 与 PreparedStatement
  • 4.完整源码
  • 《目录:Java-JDBC学习(编写中...)》
  • 《幕》

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-INFservicesjava.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.完整源码
  • 点击前往下载(消耗1积分)
《目录:Java-JDBC学习(编写中…)》
  • 点击跳转
《幕》
  • 留白 —<老吉>
  • ~ 今 ~ ❀ ~ ❀❀❀❀❀❀❀❀❀❀ ❀❀❀❀❀❀❀❀❀❀ ❀❀❀❀❀❀❀
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/852345.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号