PreparedStatement
Statement 的⼦类,提供了 SQL 占位符的功能 使⽤ Statement 进⾏开发有两个问题: 1、需要频繁拼接 String 字符串,出错率较⾼。 2、存在 SQL 注⼊的⻛险。 SQL 注⼊:利⽤某些系统没有对⽤户输⼊的信息进⾏充分检测,在⽤户输⼊的数据中注⼊⾮法的 SQL语句,从⽽利⽤系统的 SQL 引擎完成恶意⾏为的做法String pword="124 'or '1=1"; String sql="Select *from user where name='"+username+" 'and password='"+pword+"'";
显示
Select *from user wherename='肖战 'and password='124 'or '1=1' 此时密码无论如何都可以进去
用法
1.sql语句不同
String sql = "select * from t_user where username = ? and password = ?";
2.在创建prepareStatement时就将sql语句传入 PreparedStatement preparedStatement = connection.prepareStatement(sql);
3.问号的赋值 preparedStatement.setString(1,username); preparedStatement.setString(2,mypassword); ResultSet resultSet = preparedStatement.executeQuery(); if(resultSet.next()){ System.out.println("登录成功"); }else{ System.out.println("登录失败"); }