PreparedStatement的一点记录

今天看了Java Web教程视频,里面讲了MVC思想,Controller->Model->Dao->View,即在Controller中写操作,Service写对Model操作的逻辑,Dao层写数据库连接和具体操作,注意到三行代码:
Connection conn = DB_Util.getConnection();
String sql = "select * from student where 1<>1";
PreparedStatement ps = conn.prepareStatement(sql);

其中SQL语句的where 1<>1作用是当其他拼接的条件都不符合时返回空集,如果是where 1=1则返回全集,明显前者节省开销。

其次就是PreparedStatement类,他与Statement相比:

1.PreparedStatement可以传入带占位符的SQL语句,以便修改。

String sql="INSERT INTO course(id,name,classroom) VALUES(?,?,?);"
PreparedStatement ps;
ps.setLong(1,"1");
ps.setString(2,"zzjune");
ps.setString(3,"yifulou"); 

2.PreparedStatement可以防止SQL注入。

select * from users where username='a' or password='and password=' or '1'='1';

比如这条SQL语句,分析一下我们就会明白,其在数据库中执行的命令是:

username='a' or password='and password=' or '1'='1';

故会返回全集,这就是使用Statement可能会出现的情况,而PreparedStatement则会避免诸如此类的SQL注入,因为在预处理过程中就已经对SQL语句进行了处理,会将输入的字段完全作为一个参数来处理,引号也会被转义。

3.在更新数据库时,PreparedStatement有ps.executeUpdate();方法,该方法没有参数。Statement有executeQuery(sql)和execute(sql)方法,前者返回结果集,后者返回布尔值(也可无左值)。

参考资料:

点击打开链接

点击打开链接

点击打开链接

扫描二维码关注公众号,回复: 907533 查看本文章

点击打开链接



猜你喜欢

转载自blog.csdn.net/qq_31293215/article/details/79823814
今日推荐