1.SQL注入问题
1.什么是SQL注入问题?
用户输入的数据中有SQL关键字或语法并且参与了SQL语句的编译,导致SQL语句编译后的条件含义为true,一直得到正确的结果。这种现象称为SQL注入。
2.如何避免SQL注入
由于编写的SQL语句是在用户输入数据,整合后再进行编译。所以为了避免SQL注入的问题,我们要使SQL语句在用户输入数据前就已进行编译成完整的SQL语句,再进行填充数据。
2.PreparedStatement
PreparedStatement继承了Statement接口,执行SQL语句的方法无异。
1.作用:
1.预编译SQL语句,效率高。
2.安全,避免SQL注入。
3.可以动态填充数据,执行多个同构SQL语句。
2.参数标记:
3.动态参数绑定:
3.PreparedStatement示例代码:
import java.sql.*;
import java.util.Scanner;
public class QueryJdbc2 {
public static void main(String[] args) throws Exception{
Scanner sc=new Scanner(System.in);
System.out.println("请输入账号:");
String name=sc.nextLine();
System.out.println("请输入密码:");
String pwd=sc.nextLine();
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/test";
String user="root";
String password="123456";
Connection connection= DriverManager.getConnection(url,user,password);
//1.编写占位符SQL语句
String sql="select * from users where username=? and password=?";
//2.获得PreparedStatement,预编译SQL语句
PreparedStatement preparedStatement=connection.prepareStatement(sql);
//3.为占位符赋值
preparedStatement.setString(1,name);
preparedStatement.setString(2,pwd);
//4.得到结果
ResultSet resultSet=preparedStatement.executeQuery();
if(resultSet.next()){
System.out.println("登录成功!");
}
else{
System.out.println("登录失败!");
}
//5.释放资源
resultSet.close();
preparedStatement.close();
connection.close();
}
}