JDBC中PreparedStatement

本文介绍了SQL注入问题的原理及如何通过使用PreparedStatement来避免此类安全问题。通过示例代码展示了PreparedStatement如何预编译SQL语句并绑定参数,从而提高效率和安全性。
摘要由CSDN通过智能技术生成

1.SQL注入问题
1.什么是SQL注入问题?
用户输入的数据中有SQL关键字或语法并且参与了SQL语句的编译,导致SQL语句编译后的条件含义为true,一直得到正确的结果。这种现象称为SQL注入。


2.如何避免SQL注入
由于编写的SQL语句是在用户输入数据,整合后再进行编译。所以为了避免SQL注入的问题,我们要使SQL语句在用户输入数据前就已进行编译成完整的SQL语句,再进行填充数据。

2.PreparedStatement
PreparedStatement继承了Statement接口,执行SQL语句的方法无异。


1.作用:
1.预编译SQL语句,效率高。
2.安全,避免SQL注入。
3.可以动态填充数据,执行多个同构SQL语句。


2.参数标记:
在这里插入图片描述


3.动态参数绑定:
在这里插入图片描述

3.PreparedStatement示例代码:

import java.sql.*;
import java.util.Scanner;

public class QueryJdbc2 {
    public static void main(String[] args) throws Exception{

        Scanner sc=new Scanner(System.in);
        System.out.println("请输入账号:");
        String name=sc.nextLine();
        System.out.println("请输入密码:");
        String pwd=sc.nextLine();


        Class.forName("com.mysql.jdbc.Driver");

        String url="jdbc:mysql://localhost:3306/test";
        String user="root";
        String password="123456";
        Connection connection= DriverManager.getConnection(url,user,password);

        //1.编写占位符SQL语句
        String sql="select * from users where username=? and password=?";
        //2.获得PreparedStatement,预编译SQL语句
        PreparedStatement preparedStatement=connection.prepareStatement(sql);
        //3.为占位符赋值
        preparedStatement.setString(1,name);
        preparedStatement.setString(2,pwd);

        //4.得到结果
        ResultSet resultSet=preparedStatement.executeQuery();

        if(resultSet.next()){
            System.out.println("登录成功!");
        }
        else{
            System.out.println("登录失败!");
        }

        //5.释放资源
        resultSet.close();
        preparedStatement.close();
        connection.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值