用法就是如下边所示:
[java]
view plaincopy
- String sql="update cz_zj_directpayment dp"+
- "set dp.projectid = ? where dp.payid= ?";
- try {
- PreparedStatement pset_f = conn.prepareStatement(sql);
- pset_f.setString(1,inds[j]);
- pset_f.setString(2,id);
- pset_f.executeUpdate(sql_update);
- }catch(Exception e){
- //e.printStackTrace();
- logger.error(e.message());
- }
那为什么它这样处理就能预防SQL注入提高安全性呢?其实是
因为SQL语句在程序运行前已经进行了预编译,
在程序运行时第一次操作数据库之前,SQL语句已经被数据库分析,编译和优化,对应的执行计划也会缓存下来并允许数据库已
参数化的形式
进行查询,当运行时动态地把参数传给
PreprareStatement时,即使参数里有敏感字符如 or '1=1'也数据库会作为一个参数一个字段的属性值来处理而不会作为一个SQL指令,如此,就起到了SQL注入的作用了!(
预编译指的是数据库预处理,包括分析、编译和优化)
转载请注明—作者:Java我人生(陈磊兴) 原文出处:
java中预处理PrepareStatement为什么能起到防止SQL注入的作用??!!_Java我人生的博客-CSDN博客_java sql预处理