JDBC PreparedStatement
使用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相关推荐
- java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.setCharacterStream(ILjava/io/Reader;
出现上述异常是在使用MySQL进行大文本数据的读写时,使用PreparedStatement中的 setCharacterStream(int parameterIndex,Reader reader ...
- JDBC PreparedStatement 实现原理【推荐阅读】
???关注微信公众号:[芋艿的后端小屋]有福利: RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表 RocketMQ / MyCAT / Sharding-JDB ...
- MySQL JDBC PreparedStatement
JDBC作为JAVA访问数据库的一套规范与标准,统一了数据库操作的API,大大简化了程序开发工作.不过由于历史原因,MySQL对JDBC默认的实现与规范定义或者说其它数据库如Oracle并不一致,为了 ...
- java jdbc 批量更新_java – JDBC PreparedStatement,批量更新和生成的密钥
我在批处理中使用jdbc preparedStatement并尝试获取由此创建的生成密钥时出现问题. 代码 : PreparedStatement stmt = null; ... connectio ...
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之06.JDBC PreparedStatement
–PreparedStatement –为占位符"?"赋值 –使用PreparedStatement动态执行SQL语句 ####################Michael分割线 ...
- jdbc连接mysql传参_将参数传递给JDBC PreparedStatement
我正在尝试为我的程序制作验证类.我已经建立了与MySQL数据库的连接,并且已经在表中插入了行.该表由firstName,lastName和userID领域.现在,我想通过构造函数的参数在数据库中选择特 ...
- java jdbc 传参_java – 将参数传递给JDBC PreparedStatement
我正在尝试为我的程序制作验证课程.我已经建立了与 MySQL数据库的连接,我已经在表中插入了行.该表由firstName,lastName和userID字段组成.现在我想通过构造函数的参数在数据库中选 ...
- mysql jdbc怎么用问号传参_java – jdbc PreparedStatement中的问号问题
我来回浏览互联网,发现我的问题无法解决. 我试图使用参数绑定与jdbc查询mysql表,但它在我的语句中不断报告问号的语法错误. 这是我的班级: package todoList_; import j ...
- jdbc PreparedStatement中“?”报错
报错场景:用jdbc连接mysql,用PreparedStatement时候报了sql语句的错误. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorEx ...
- Java JDBC PreparedStatement类
"Statement"对象,每执行一条语句,都会让数据库先编译再运行 "PreparedStatement"对象,则会相同语句,不同参数(通过?号传入)进行一次 ...
最新文章
- android离线宝,Android 离线安装宝典
- 2018.09.21 atcoder An Invisible Hand(贪心)
- ElasticSearch客户端注解使用介绍
- 物化视图和视图的最大区别_基于catalyst的物化视图改写引擎的实现
- 飞鸽传书从天齐庙南门出来
- 面试官:说说Mysql数据库分库分表,并且会有哪些问题?
- Integer与int的种种比较
- [路由器] k2p支持ipv6相关设置
- PyQt5+周立功 CAN上位机制作
- 【2022.1】电脑重装系统后浏览器密码恢复:Edge需自己打开自动同步,Chrome默认直接同步
- Android intent category大全
- MFC对话框美化四(自绘标题栏)
- 《百万IT毕业生的心声:IT专业大学生毕业前必做的十件事》
- Java-Java基础—(6)面向对象高级
- LINUX学习笔记:31个常用LINUX命令和相关解释
- 小猪佩奇的4种python玩法,带你趣味学python!
- ks:能定阈值的评价指标
- json序列化 java对象_Json 数据反序列化为Java对象
- 【RPA资讯】Uipath估值70亿美金,超越OMV Petrom成罗马尼亚最有价值公司
- 程序猿:如何成为一个高级程序员
热门文章
- 机器学习实践笔记(三)时间序列数据预测
- python报表自动化系列 - 通过Python使用MySQL数据库
- java处理xls_Java处理Excel文件
- c语言burg算法,用Burg算法提升空间调制傅里叶光谱仪分辨率与定阶方法
- Linux搭建深度神经网络,linux服务器搭建深度学习环境
- ajax点击a load,jQuery:在ajax load()之后运行脚本
- Linux的/var/www/html目录
- CDH6.2.1安装Kafka出现的问题
- RDD持久化(缓存)
- java 开发环境 列表_Java 开发环境配置