本课目标
理解SQL注入的概念
掌握 PreparedStatement 接口的使用
熟练使用JDBC完成数据库的增、删、改、查操作
SQL注入
注入原理:利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句
防止SQL注入的方法:
- 过滤用户输入的数据库中是否包含非法字符
- 分步校验,先使用用户名来查询用户,如果找到了,在比较密码
- 使用 PreparedStatement 接口
PreparedStatement接口是 Statement 的子接口,可以使用该接口来替换 Statement 接口
PreparedStatement的使用
- 使用 Connection 对象的preparedStatement(String sql):即创建它时就让它与一条SQL语句绑定
- 编写SQL语句时,如果存在参数,使用“?” 作为数据占位符
- 调用PreparedStatement 的 setXXX()系列方法为占位符设置值,索引从1开始
- 调用 executeUpdate() 或 executeQuery() 方法,但要注意,调用没有参数的方法
PreparedStatement编程模板
使用JDBC完成数据添加的操作模板
使用JDBC完成数据修改的操作模板
使用JDBC完成数据删除的操作模板
代码演示
-
User 类
public class User {
private int id;
private String userName;
private String userPass;
private int role;
public User(int id, String userName, String userPass, int role) {
this.id = id;
this.userName = userName;
this.userPass = userPass;
this.role = role;
}
public User() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String user