Statement和PreparedStatement的区别及联系
两者之间的联系:
Statement和PreparedStatement两者都是用来执行SQL查询语句的API之一
PreparedStatement接口继承了Statement接口
两者之间的区别:
Statement不对SQL语句做处理,直接交给数据库;而PreparedStatement是支持预编译的,会将编译好的SQL语句放在数据库端,相当于缓存.对于多次重复执行的SQL语句,使用PreparedStatement可以使得代码的执行效率更高
使用Statement对象.在对数据库只执行一次存取的时候,用Statement对象进行处理;PreparedStatement对象的开销比Statement大,对于一次性操作并不会带来额外的好处
执行许多SQL语句的JDBC程序产生大量的Statement和PreparedStatement对象,通常认为PreparedStatement比Statement对象更有效
Statement的SQL语句使用字符串拼接的方式,非常容易导致出错,且存在SQL注入的风险 Preparedment使用"?"占位符,提升了代码的可读性和可维护性,并且这种绑定参数的方式,可以有效防止SQL注入
SQL注入:
SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
实例:
当我们用户在登录时,需要验证用户名和密码,对应后台的SQL语句为: SELECT * FROM tablename WHERE username = "***" AND password = "###", ###为传入的用户名和密码,根据SQL的返回结果来判断登录是否成功.这样就是我们在登录时后台进行的简单步骤
假如数据库中存在 username 为 123 , password 为 456 的信息,此时在用户登录界面输入信息,当信息与上面的匹配一致时,我们就会登录成功.但是假如我们把输入的password内容改为 111 or 1=1,生成的SQL语句就为 SELECT * FROM tablename WHERE usename = 123 AND password = 111 or 1=1.此时我们并没有输入正确的密码,但是在SQL语句中会判断出password后面的"1=1"为真,所以即使我们没有输入正确的密码,也能登录成功.这就是非法的SQL注入
Statement和PreparedStatement的区别及联系相关推荐
- Statement与PreparedStatement的区别
Statement与PreparedStatement的区别 PreparedStatement预编译SQL语句,性能好. PreparedStatement无序拼接SQL语句,编程更简单. Prep ...
- 数据库SQL Server2012笔记(八)——Statement与PreparedStatement的区别,JDBC方式操作数据库...
1.Statement与PreparedStatement的区别 1)都可用于 把sql语句从java程序中发送到制定数据库,并执行sql语句. 2)区别 直接使用Statement,驱动程序一般不 ...
- 浅析Statement和PreparedStatement的区别
当我们使用java程序来操作sql server时会使用到Statement和PreparedStatement,俩者都可以用于把sql语句从java程序中发送到指定数据库,并执行sql语句.那么如何 ...
- Statement和PreparedStatement的区别/PreparedStatement和Statement比较的优点
Statement 和 PreparedStatement之间的关系和区别. 关系:PreparedStatement继承自Statement,都是接口 区别:PreparedStat ...
- JDBC中Statement与PreparedStatement的区别
http://www.blogjava.net/redcoatjk/archive/2012/07/20/383583.html 1. statement每次执行sql语句,相关数据库都要执行sql语 ...
- JDBC中的Statement 和PreparedStatement的区别?
PreparedStatement 继承于 Statement Statement 一般用于执行固定的没有参数的SQL PreparedStatement 一般用于执行有?参数预编译的SQL语句. P ...
- java Statement与preparedStatement的区别
1.数据库执行preparedStatement的时候会预编译,下次再执行此sql语句的时候,数据库端将不会再进行预编译了,而直接去数据库的缓存区,提高访问的效率. 2.在任何时候都不要使用State ...
- JDBC中的Statement和PreparedStatement的区别
PreparedStatement是什么?PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement ...
- JDBC自我复习之Statement和PreparedStatement的区别
一.Statement 1.1 介绍 Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句. Statement对象,用于执 ...
最新文章
- Android获取屏幕尺寸大小
- Spring学习(一)初识Spring
- 京东JDHBase异地多活实践
- 第三次学JAVA再学不好就吃翔(part108)--带缓冲的字符流
- Linux下java/bin目录下的命令集合
- 隐隐约约 听 RazorEngine 在 那里 据说 生成代码 很 美。
- Web前端笔记(9) flex布局
- Linux与shell编程之一: Linux基础知识总结
- vc mscomm串口通信使用了CButtonST按钮类软件分析
- python post 表单类数据_python post content-type:multipart/form-data 类型的表单数据
- python etree htm参数_使用etree.HTML的编码问题
- java漂亮的模板设计代码_JAVA模板方法设计模式——Java设计模式,写漂亮的代码——...
- 【C++】常用集合算法
- 发送邮件 空格 java_java实现邮件发送功能
- 《请君入瓮——APT攻防指南之兵不厌诈》目录—导读
- C语言 输出1000以内所有完数
- WPS快捷键之 EXCEL高级
- [离散数学]集合论基础P_4:运算定律及其证明
- 路由器与交换机基本原理
- 微信打开网址提示在浏览器中打开的办法