目录
一、PreparedStatement(防止SQL注入)类
-
PreparedStatement的概述
解析:
1.在上述,我们已经知道Statement是用来发送sql语句的,但是它有以下几个缺点:
1.1、sql语句是拼接的
1.2、拼接的sql语句容易出错
1.3、可读性错
1.4、存在SQL攻击/SQL注入危及系统安全问题(这个是非常致命的关键问题)
2.为了解决上述的问题,于是JDBC提供PreparedStatement接口横空出世替换Statement接口,完美的解决了上述的4个问题,最重要决了第4点的安全问题。
3.PreparedStatement接口是Statement的子接口, 功能比Statement更强大,它有如下优点:
3.1、带预编译功能, 让数据库开启预编译功能
3.2、使用?占位,不需要拼接sql, 可读性高 解析:sql语句中的值使用 ? 占位
3.3、使用?占位,不需要拼接sql,sql攻击/SQL注入失效
3.4、提高代码的可读性,以可维护性;
3.5、提高效率。
特别注意:在实际开发中, 能使用PreparedStatement一定不要使用Statement
-
PreparedStatement的常用方法
解析:
1.使用Connection的prepareStatement(String sql):作用:即创建它时就让它与一条SQL模板绑定;
2.调用PreparedStatement的setXXX()系列方法作用:为问号设置值
3.调用executeUpdate()或executeQuery()方法,但要注意,调用没有参数的方法;
4.clearParameters()方法作用:再次使用上一个SQL模板时需要把原来的设置的参数清空。
-
SQL注入攻击演示:
演示代码:
package week2.day4;
import java.sql.*;
public class StatementDemo {
public static void main(String[] args) {
login("5' or '1' = '1","5' or '1'='1");
}
// 登录方法
public static void login(String username,String password){
// 3大对象
Connection connection = null;
Statement statement = null;
ResultSet resultSet &#