JDBC解决sql注入问题
使用PrepareStatement解决SQL注入问题,前面我们使用拼接实现username和password的动态赋值,会产生sql的问题。问题在于sql语句的主体部分没有确定,会随着sql拼接,主体会改变,该sql属于静态sql。此处我们使用预编译sql,也就是sql的主体部分已经定死,不能更改。
两种实现方法的区别:
preparestatement需要传递sql语句
statement不需要传递sql语句
private static void method2() throws SQLException {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入登录名:");
String username = scanner.nextLine();
System.out.print("请输入密码:");
String pwd = scanner.nextLine();
Connection connection = JDBCUtils.getConnection();
String sql = "SELECT * FROM account WHERE username = ? AND PASSWORD = ?;";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1,username);
statement.setString(2,pwd);
ResultSet resultSet = statement.executeQuery();
if (resultSet.next()) {
System.out.println("登录成功!!!");
} else {
System.out.println("登录失败!!!");
}
JDBCUtils.close(resultSet,statement,connection);
}