JDBC:预处理查询 PreparedStatement

本文展示了如何在Java中使用PreparedStatement执行SQL查询,以此来防止SQL注入攻击。程序通过用户输入的管理员名字和密码进行登录验证,演示了PreparedStatement如何设置参数并执行查询。在成功查询到管理员信息时,输出‘恭喜,登录成功’,否则提示‘抱歉,登录失败’。
摘要由CSDN通过智能技术生成

在这里插入图片描述

package com.hspedu.jdbc.preparedStatement_;

import java.io.FileInputStream;
import java.sql.*;
import java.util.Properties;
import java.util.Scanner;

public class PreparedStatement_ {

    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(System.in);

        //让用户输入管理员名和密码
        System.out.print("请输入管理员的名字:");
        String admin_name = scanner.nextLine();  //若使用next(),当接收到空格或者'就表示结束
        System.out.print("请输入管理员的密码:");
        String admin_pwd = scanner.nextLine();   //如果想要看到SQL注入效果,这里需要用nextLine()

        //通过Properties对象获取配置文件的信息
        Properties properties = new Properties();
        properties.load(new FileInputStream("src/mysql.properties"));
        //读取相关的值
        String driver = properties.getProperty("driver");
        String url = properties.getProperty("url");
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");

        //1.注册驱动
        Class.forName(driver);

        //2.得到连接
        Connection connection = DriverManager.getConnection(url, user, password);

        //3.得到Statement
        //3.1.sql语句,sql语句的?就相当于占位符
        String sql = "select name, pwd from admin where name = ? and pwd = ?";
        //3.2.preparedStatement对象实现了PreparedStatement接口的实现类的对象
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //3.3.给?赋值
        preparedStatement.setString(1, admin_name);
        preparedStatement.setString(2, admin_pwd);

        //4.执行select语句使用executeQuery
        //  如果执行的是dml(update, insert, delete) executeUpdate()
        ResultSet resultSet = preparedStatement.executeQuery();  //这里执行executeQuery, 不用再传入sql语句,否则传进去的是最初的sql语句
        if (resultSet.next()) {   //如果查询到一条记录,则说明该管理存在
            System.out.println("恭喜,登录成功");
        } else {
            System.out.println("抱歉,登录失败");
        }

        //关闭连接
        resultSet.close();
        connection.close();
        preparedStatement.close();
    }
}

输出:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
PreparedStatement的好处
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值