importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.Scanner;/*SQL 注入攻击*/
public classDemo02 {public static voidmain(String[] args) {try{
Statement statement=JDBCUtil.getConnection().createStatement();//selectAll(statement);
select();
}catch(SQLException s){
s.printStackTrace();
}
}/*** 使用 。。登录数据库 zeng 1 ' or '1=1
*@paramstatement*/
public static voidselectAll(Statement statement){
Scanner scanner=newScanner(System.in);
String username=scanner.nextLine();
String pwd=scanner.nextLine();
String sql="select*from user where username='"+username+"' and pwd='"+pwd+"';";try{boolean b=statement.execute(sql);
System.out.println(b);
ResultSet resultSet=statement.executeQuery(sql);while(resultSet.next()){
System.out.println(resultSet.getString("username")+"\t"+resultSet.getString("pwd"));
}
scanner.close();
resultSet.close();
statement.close();
}catch(SQLException e) {
e.printStackTrace();
}
}/*** 创建一个PreparedStatement对象,用于将参数化的SQL语句发送到数据库。
* SQL语句可以预编译并存储在PreparedStatement对象中
* 防止注入攻击*/
public static voidselect(){
Scanner scanner=newScanner(System.in);
String username=scanner.nextLine();
String pwd=scanner.nextLine();
String sql="select*from user where username= ? and pwd= ?";try{
PreparedStatement preparedStatement=JDBCUtil.getConnection().prepareStatement(sql);//使用给定对象设置指定参数的值。
preparedStatement.setObject(1,username);
preparedStatement.setObject(2,pwd);//执行此 PreparedStatement对象中的SQL查询,并返回查询 PreparedStatement的 ResultSet对象。
ResultSet resultSet=preparedStatement.executeQuery();while(resultSet.next()){
System.out.println(resultSet.getString("username")+"\t"+resultSet.getString("pwd"));
}
scanner.close();
resultSet.close();
preparedStatement.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}