基于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 @   白茶花约  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示