目标

使用preparedStatement对象操作sql语句

实现登陆的功能

编写代码

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

public class Test10 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {

        // 加载驱动
        Class.forName("com.mysql.jdbc.Driver");

        // 获取连接对象
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbhui", "root", "root123");

        // 构建sql语句。创建一个带有占位符的语句,后面可以填入数据的
        // 把语句中的动态的部分用?代替 连单引号一起
        String sql = "SELECT * FROM usertable WHERE sname=? AND spwd=?";

        // 获得preparedStatement对象
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        // 往占位的?中填入数据
        // 第一个问号的位置是1,根据位置填入数据
        // 先从键盘接收数据,然后往问号占位符里填入数据
        // 新建一个scanner对象
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = scanner.next();
        System.out.println("请输入密码:");
        String password = scanner.next();
        // 开始填?
        preparedStatement.setString(1, username);
        preparedStatement.setString(2, password);

        // 打印查看一下效果
        // 引号被转义,失去了功效
        System.out.println(preparedStatement);

        // 利用ps对象执行sql语句
        ResultSet resultSet = preparedStatement.executeQuery();

        // 处理结果
        // 如果有查询到结果,就成功,否则就是失败的
        if(resultSet.next()){
            System.out.println("登陆成功!");
        }else {
            System.out.println("登陆失败~~");
        }

        // 程序结束
        System.out.println("game over");


    }
}

效果

使用preparedStatement执行sql语句 20210411094249744_sql语句

进行sql注入式的登陆

使用preparedStatement执行sql语句 20210411094249744_sql注入_02

preparedStatement对象的作用
  • 动态参数
  • 防止sql注入
  • 预编译,提高效率
用法小结

课堂添加。。。