我是靠谱客的博主 落后芒果,这篇文章主要介绍CC00088.bigdatajava——|Java&MySQL.JDBC.V13|——|MySQL.v13|Jdbc开发_使用预处理对象解决SQL注入|,现在分享给大家,希望可以做个参考。
一、[使用预处理对象解决SQL注入]
复制代码
1
2
3
4
5
6### --- PreparedStatement接口介绍 ——> PreparedStatement 是 Statement 接口的子接口,继承于父接口中所有的方法。 ——> 它是一个预编译的 SQL 语句对象. ——> 预编译: 是指SQL 语句被预编译,并存储在 PreparedStatement 对象中。 ——> 然后可以使用此对象多次高效地执行该语句。
复制代码
1
2
3
4### --- PreparedStatement 特点 ——> 因为有预先编译的功能,提高 SQL 的执行效率。 ——> 可以有效的防止 SQL 注入的问题,安全性更高
复制代码
1
2
3### --- 获取PreparedStatement对象 ——> 通过Connection创建PreparedStatement对象
Connection 接口中的方法 | 说明 |
PreparedStatement prepareStatement(String sql) |
指定预编译的 SQL 语句,
SQL 语句中使用占位符 ? 创建一个语句对象 |
二、PreparedStatement接口常用方法
常用方法 | 说明 |
int executeUpdate(); | 执行insert update delete语句. |
ResultSet executeQuery(); | 执行select语句. 返回结果集对象 Resulet |
复制代码
1
2
3
4### --- 使用PreparedStatement的步骤 ——> 编写 SQL 语句,未知内容使用?占位: "SELECT * FROM jdbc_user WHERE username=? AND password=?";
复制代码
1
2——> 获得 PreparedStatement 对象 3) 设置实际参数: ——> setXxx( 占位符的位置, 真实的值) 4) 执行参数化 SQL 语句 5)关闭资源
setXxx重载方法 | 说明 |
void setDouble(int parameterIndex, double x) | 将指定参数设置为给定 Java double 值。 |
void setInt(int parameterIndex, int x) | 将指定参数设置为给定 Java int 值。 |
void setString(int parameterIndex, String x) | 将指定参数设置为给定 Java String 值。 |
void setObject(int parameterIndex, Object x) | 使用给定对象设置指定参数的值。 |
复制代码
1
2
3### --- 使用PreparedStatement完成登录案例 ——> 使用 PreparedStatement 预处理对象,可以有效的避免SQL注入

复制代码
1
2
3
4
5
6
7
8
9
10### --- 步骤: ——> 获取数据库连接对象 ——> 2.编写SQL 使用? 占位符方式 ——> 3.获取预处理对象 (预编译对象会将Sql发送给数据库 进行预编译) ——> 4.提示用户输入用户名 & 密码 ——> 5.设置实际参数:setXxx(占位符的位置, 真实的值) ——> 6.执行查询获取结果集 ——> 7.判断是否查询到数据 ——> 8.关闭资源
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50public class TestLogin02 { /** * 使用预编译对象 PrepareStatement 完成登录案例 * @param args * @throws SQLException */ public static void main(String[] args) throws SQLException { //1.获取连接 Connection connection = JDBCUtils.getConnection(); //2.获取Statement Statement statement = connection.createStatement(); //3.获取用户输入的用户名和密码 Scanner sc = new Scanner(System.in); System.out.println("请输入用户名: "); String name = sc.nextLine(); System.out.println("请输入密码: "); String pass = sc.nextLine(); System.out.println(pass); //4.获取 PrepareStatement 预编译对象 //4.1 编写SQL 使用 ? 占位符方式 String sql = "select * from jdbc_user where username = ? and password = ?"; PreparedStatement ps = connection.prepareStatement(sql); //4.2 设置占位符参数 ps.setString(1,name); ps.setString(2,pass); //5. 执行查询 处理结果集 ResultSet resultSet = ps.executeQuery(); if(resultSet.next()){ System.out.println("登录成功! 欢迎您: " + name); }else{ System.out.println("登录失败!"); } //6.释放资源 JDBCUtils.close(connection,statement,resultSet); } }
三、sql语句
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62package com.yanqi.jdbc05; import com.yanqi.jdbc05.JdbcUtils; import java.sql.*; import java.util.Scanner; public class JdbcLogin02 { /* * SQL注入 * 用户输入的用户名和密码 与我们编写的SQL进行了拼接,用户输入的内容成为了SQL语法的一部分, * 用户会利用这里漏洞 输入一些其他的字符串,改变SQL原有的意思 * * 如果解决 * 要解决SQL注入 就不能让用户输入的数据和我们的SQL进行直接的拼接 * * 预处理对象 PrepareStatement 他是 Statement接口的子接口 * 使用预处理对象 他有预编译的功能,提高SQL的执行效率 * 使用预处理对象 通过占位符的方式 设置参数 可以有效的防止SQL注入 * * * */ public static void main(String[] args) throws SQLException { //1.获取连接 Connection con = JdbcUtils.getConnection(); //2.获取PrepareStatement 预处理对象 //使用 ? 占位符的方式来设置参数 String sql = "select * from jdbc_user where username = ? and password = ?"; PreparedStatement ps = con.prepareStatement(sql); //3.获取用户输入的用户名和密码 Scanner sc = new Scanner(System.in); System.out.println("请输入用户名: "); String name = sc.nextLine(); System.out.println("请输入密码: "); String pass = sc.nextLine(); //4.设置参数 使用setXXX(占位符的位置(整数),要设置的值)的方法设置占位符的参数 ps.setString(1,name); // 设置第一个问号值 为 name ps.setString(2,pass); //5.执行查询 ResultSet resultSet = ps.executeQuery(); //6.处理结果集 //6.处理结果集 if(resultSet.next()){ System.out.println("登录成功! 欢迎您: " + name); }else{ System.out.println("登录失败! "); } //7.关闭流 JdbcUtils.close(con,ps,resultSet); } }
四、打印输出
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29#密码正确正常登录 D:JAVAjdk-11.0.2binjava.exe "-javaagent:D:IntelliJIDEAIntelliJ IDEA 2019.3.3libidea_rt.jar=61404:D:IntelliJIDEAIntelliJ IDEA 2019.3.3bin" -Dfile.encoding=UTF-8 -classpath "E:NO.Z.10000——javaprojectNO.H.00002.mysqlmysqloutproductionmysql.jdbc;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJardom4j-1.6.1.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJardruid-1.0.9.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarc3p0-0.9.5.2.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarcommons-dbcp-1.4.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarjaxen-1.1-beta-6.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarcommons-pool-1.5.6.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarcommons-dbutils-1.6.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarmchange-commons-java-0.2.12.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarmysql-connector-java-5.1.37-bin.jar;C:UsersAdministrator.m2repositoryorgjetbrainsannotations18.0.0annotations-18.0.0.jar;C:UsersAdministrator.m2repositoryjunitjunit4.12junit-4.12.jar;C:UsersAdministrator.m2repositoryorghamcresthamcrest-core1.3hamcrest-core-1.3.jar" com.yanqi.jdbc05.JdbcLogin02 请输入用户名: tom 请输入密码: 123456 登录成功! 欢迎您: tom Process finished with exit code 0 #密码错误拒绝登录 D:JAVAjdk-11.0.2binjava.exe "-javaagent:D:IntelliJIDEAIntelliJ IDEA 2019.3.3libidea_rt.jar=61420:D:IntelliJIDEAIntelliJ IDEA 2019.3.3bin" -Dfile.encoding=UTF-8 -classpath "E:NO.Z.10000——javaprojectNO.H.00002.mysqlmysqloutproductionmysql.jdbc;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJardom4j-1.6.1.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJardruid-1.0.9.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarc3p0-0.9.5.2.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarcommons-dbcp-1.4.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarjaxen-1.1-beta-6.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarcommons-pool-1.5.6.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarcommons-dbutils-1.6.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarmchange-commons-java-0.2.12.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarmysql-connector-java-5.1.37-bin.jar;C:UsersAdministrator.m2repositoryorgjetbrainsannotations18.0.0annotations-18.0.0.jar;C:UsersAdministrator.m2repositoryjunitjunit4.12junit-4.12.jar;C:UsersAdministrator.m2repositoryorghamcresthamcrest-core1.3hamcrest-core-1.3.jar" com.yanqi.jdbc05.JdbcLogin02 请输入用户名: 111 请输入密码: 111 登录失败! Process finished with exit code 0 #用户名和密码不正确但是登陆失败;sql注入的失败 D:JAVAjdk-11.0.2binjava.exe "-javaagent:D:IntelliJIDEAIntelliJ IDEA 2019.3.3libidea_rt.jar=61452:D:IntelliJIDEAIntelliJ IDEA 2019.3.3bin" -Dfile.encoding=UTF-8 -classpath "E:NO.Z.10000——javaprojectNO.H.00002.mysqlmysqloutproductionmysql.jdbc;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJardom4j-1.6.1.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJardruid-1.0.9.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarc3p0-0.9.5.2.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarcommons-dbcp-1.4.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarjaxen-1.1-beta-6.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarcommons-pool-1.5.6.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarcommons-dbutils-1.6.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarmchange-commons-java-0.2.12.jar;F:NO.Z.02000——soft——IT.实验20210801——Hadoop20210801.2——Hadoop——第二阶段——预科班预科班第二阶段模块一5 任务五 (JDBC)3_软件myJarmysql-connector-java-5.1.37-bin.jar;C:UsersAdministrator.m2repositoryorgjetbrainsannotations18.0.0annotations-18.0.0.jar;C:UsersAdministrator.m2repositoryjunitjunit4.12junit-4.12.jar;C:UsersAdministrator.m2repositoryorghamcresthamcrest-core1.3hamcrest-core-1.3.jar" com.yanqi.jdbc05.JdbcLogin02 请输入用户名: zbc 请输入密码: zbc' or '1'='1 登录失败! Process finished with exit code 0
最后
以上就是落后芒果最近收集整理的关于CC00088.bigdatajava——|Java&MySQL.JDBC.V13|——|MySQL.v13|Jdbc开发_使用预处理对象解决SQL注入|的全部内容,更多相关CC00088内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复