占位符的使用
Statement接口操作数据存在的问题问题一问题二
PrepareStatement接口改善问题占位符代码演示密码登录DEMO
Statement接口操作数据存在的问题
问题一
使用Statement接口对象发送的sql语句需要在数据库中进行一次编译之后成为指令才能执行,每条sql语句都需要编译一次,这样是很慢的。
问题二
使用Statement接口才做的sql可以需要使用字符串拼接的方式实现,这样的方式可能存在sql注入的安全风险并且拼接字符串比较麻烦的。
PrepareStatement接口改善问题
使用PrepareStatement接口操作的sql语句会先预编译成指令再发送给数据库,数据库就执行指令即可,这样就提高了一定速度。而且使用该接口可以避开sql需要使用字符串拼接的方式,从而没有了sql注入的安全风险,而是使用占位符(?)来替代原来的字符串拼接。
占位符代码演示
密码登录DEMO
public class SelectLogin {
public static void main(String[] args) throws Exception{
}
public static void selectLogin(String name,String pwd) throws Exception {
Connection conn=ConnectionUtil.getConnection();
String sql="SELECT*FROM myuser WHERE username=? AND password=?";
PreparedStatement pst=conn.prepareStatement(sql);
// 为占位符赋值
pst.setString(1, name);
pst.setString(2, pwd);
ResultSet rst=pst.executeQuery();
if (rst.next()) {
System.out.println("欢迎光临");
} else {
System.out.println("用户名密码不正确");
}
}
}
使用占位符的好处:
避开sql语句的注入风险会为字符串自动增加上单引号