使用Statement执行查询语句的时候  :

比如要执行用户名 密码登录验证的sql语句 经常要输入 String sql =  " select * from login where name=' " +name+ " ' and pwd = ' " +pwd+ " ' ";

这时候如果用户输入的密码是  ' or '1' = '1

这时候 整条输出语句可以拼装为    select * from login where name='xx' and pwd =' ' or '1' = '1'

因为  '1' = '1'  永远为true   相当于  select * from login;     会把表中所有数据都查出来  甚至可能进行修改、删除

而使用PreparedStatement 就可以防止sql注入方式 是因为 它进行了循环遍历:

首先这个类进行语句执行不是直接进行语句的拼接,而是先进行预编译,用? 进行占位 再set()的时候 将属性左右加上 ' (int类型不会)

然后会把用户输入的所有字符集全部遍历 如果识别出 一些特殊字符 比如  换行符、\ 、双引号、单引号 还有一些特殊字符 会进行编译

比如还是输入刚才的密码  会变成 select * from login where name='xx' and pwd =' \' or \'1\' = \'1\'  '

所以使用了PreparedStatement 就 无法截断SQL语句,也就是说  无法拼接SQL语句,防止了sql注入。

参考原文:https://blog.csdn.net/qq_39740629/article/details/77719468

转载于:https://www.cnblogs.com/zhuyeshen/p/11004848.html

JDBC PreparedStatement相关推荐

  1. java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.setCharacterStream(ILjava/io/Reader;

    出现上述异常是在使用MySQL进行大文本数据的读写时,使用PreparedStatement中的 setCharacterStream(int parameterIndex,Reader reader ...

  2. JDBC PreparedStatement 实现原理【推荐阅读】

    ???关注微信公众号:[芋艿的后端小屋]有福利: RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表 RocketMQ / MyCAT / Sharding-JDB ...

  3. MySQL JDBC PreparedStatement

    JDBC作为JAVA访问数据库的一套规范与标准,统一了数据库操作的API,大大简化了程序开发工作.不过由于历史原因,MySQL对JDBC默认的实现与规范定义或者说其它数据库如Oracle并不一致,为了 ...

  4. java jdbc 批量更新_java – JDBC PreparedStatement,批量更新和生成的密钥

    我在批处理中使用jdbc preparedStatement并尝试获取由此创建的生成密钥时出现问题. 代码 : PreparedStatement stmt = null; ... connectio ...

  5. Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之06.JDBC PreparedStatement

    –PreparedStatement –为占位符"?"赋值 –使用PreparedStatement动态执行SQL语句 ####################Michael分割线 ...

  6. jdbc连接mysql传参_将参数传递给JDBC PreparedStatement

    我正在尝试为我的程序制作验证类.我已经建立了与MySQL数据库的连接,并且已经在表中插入了行.该表由firstName,lastName和userID领域.现在,我想通过构造函数的参数在数据库中选择特 ...

  7. java jdbc 传参_java – 将参数传递给JDBC PreparedStatement

    我正在尝试为我的程序制作验证课程.我已经建立了与 MySQL数据库的连接,我已经在表中插入了行.该表由firstName,lastName和userID字段组成.现在我想通过构造函数的参数在数据库中选 ...

  8. mysql jdbc怎么用问号传参_java – jdbc PreparedStatement中的问号问题

    我来回浏览互联网,发现我的问题无法解决. 我试图使用参数绑定与jdbc查询mysql表,但它在我的语句中不断报告问号的语法错误. 这是我的班级: package todoList_; import j ...

  9. jdbc PreparedStatement中“?”报错

    报错场景:用jdbc连接mysql,用PreparedStatement时候报了sql语句的错误. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorEx ...

  10. Java JDBC PreparedStatement类

    "Statement"对象,每执行一条语句,都会让数据库先编译再运行 "PreparedStatement"对象,则会相同语句,不同参数(通过?号传入)进行一次 ...

最新文章

  1. android离线宝,Android 离线安装宝典
  2. 2018.09.21 atcoder An Invisible Hand(贪心)
  3. ElasticSearch客户端注解使用介绍
  4. 物化视图和视图的最大区别_基于catalyst的物化视图改写引擎的实现
  5. 飞鸽传书从天齐庙南门出来
  6. 面试官:说说Mysql数据库分库分表,并且会有哪些问题?
  7. Integer与int的种种比较
  8. [路由器] k2p支持ipv6相关设置
  9. PyQt5+周立功 CAN上位机制作
  10. 【2022.1】电脑重装系统后浏览器密码恢复:Edge需自己打开自动同步,Chrome默认直接同步
  11. Android intent category大全
  12. MFC对话框美化四(自绘标题栏)
  13. 《百万IT毕业生的心声:IT专业大学生毕业前必做的十件事》
  14. Java-Java基础—(6)面向对象高级
  15. LINUX学习笔记:31个常用LINUX命令和相关解释
  16. 小猪佩奇的4种python玩法,带你趣味学python!
  17. ks:能定阈值的评价指标
  18. json序列化 java对象_Json 数据反序列化为Java对象
  19. 【RPA资讯】Uipath估值70亿美金,超越OMV Petrom成罗马尼亚最有价值公司
  20. 程序猿:如何成为一个高级程序员

热门文章

  1. 机器学习实践笔记(三)时间序列数据预测
  2. python报表自动化系列 - 通过Python使用MySQL数据库
  3. java处理xls_Java处理Excel文件
  4. c语言burg算法,用Burg算法提升空间调制傅里叶光谱仪分辨率与定阶方法
  5. Linux搭建深度神经网络,linux服务器搭建深度学习环境
  6. ajax点击a load,jQuery:在ajax load()之后运行脚本
  7. Linux的/var/www/html目录
  8. CDH6.2.1安装Kafka出现的问题
  9. RDD持久化(缓存)
  10. java 开发环境 列表_Java 开发环境配置