基于preparedStatement方式优化

 1 package com.atsyc.api.preparedstatement;
 2 
 3 /*
 4  * 使用预编译statement完成用户登录
 5  *
 6  * TODO:
 7  *      防止注入攻击,演示preparedstatement完成用户登录
 8  */
 9 
10 import java.sql.*;
11 import java.util.Scanner;
12 
13 public class PSUserLoginPart {
14     public static void main(String[] args) throws ClassNotFoundException, SQLException {
15         //1.获取用户输入信息
16         Scanner scanner = new Scanner(System.in);
17         System.out.println("请输入账号:");
18         String account = scanner.nextLine();
19         System.out.println("请输入密码:");
20         String password = scanner.nextLine();
21 
22         //2.ps的数据库流程
23             //(1)注册驱动
24         Class.forName("com.mysql.cj.jdbc.Driver");
25             //(2)获取连接
26         Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/atsyc","root","Yican030615");
27             /*
28              * statement
29              *      1.创建statement
30              *      2.拼接SQL语句
31              *      3.发送SQL语句,并且获取返回结果
32              *
33              * preparedstatement
34              *      1.编写SQL语句结果  不包含动态值部分的语句,动态值部分使用占位符 ? 替代(只能替代动态值)
35              *      2.创建preparedStatement,并且传入动态值
36              *      3.动态值 占位符 赋值 ? 单独赋值即可
37              *      4.发送SQL语句即可,并获取返回结果
38              */
39             //(3)编写SQL语句结果
40         String sql = "SELECT * FROM t_user WHERE account = ? and password = ? ; ";
41             //(4)创建预编译statement并设置SQL语句结果
42         PreparedStatement preparedStatement = connection.prepareStatement(sql);
43             //(5)单独的占位符进行赋值
44             /*
45              * 参数1:index 占位符的位置 从左向右数 从1开始 账号 ? 1
46              * 参数2:object 占位符的值 可以设置任何类型的数据,避免了我们拼接和类型更加丰富
47              */
48         preparedStatement.setObject(1,account);
49         preparedStatement.setObject(2,password);
50             //(6)发送SQL语句,获取返回结果
51             /*
52              * statement.excuteUpdate / executeQuery(String sql);
53              * preparedStatement.excuteUpdate / executeQuery();  TODO:因为他已经知道语句,知道语句动态值
54              */
55         ResultSet resultSet = preparedStatement.executeQuery();
56             //(7)结果集解析
57         if(resultSet.next()){
58             System.out.println("登陆成功!");
59         }else{
60             System.out.println("登陆失败!");
61         }
62 
63     }
64 }

 

posted @ 2024-03-05 15:17  白茶花约  阅读(26)  评论(0)    收藏  举报