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 }
标签:语句,基于,preparedStatement,String,System,statement,SQL,优化 From: https://www.cnblogs.com/IrVolcano/p/18054126