JDBC中Statement与PreparedStatement的区别
http://www.blogjava.net/redcoatjk/archive/2012/07/20/383583.html
1. statement每次执行sql语句,相关数据库都要执行sql语句的编译;preparedstatement是预编译的, 采用Cache机制(预编译语句,放在Cache中,下次执行相同SQL语句时,则可以直接从Cache中取出来,有利于sql生成查询计划。),对于批量处理可以大大提高效率. 也叫JDBC存储过程。
例如,如果要执行两条sql语句
SELECT colume FROMTABLEWHERE colume=1;SELECT colume FROMTABLEWHERE colume=2;
会生成两个执行计划
一千个查询就生成一千个执行计划!
PreparedStatement用于使用绑定变量重用执行计划
SELECT colume FROMTABLEWHERE colume=:x;
通过set不同数据只需要生成一次执行计划,可以重用
是否使用绑定变量对系统影响非常大,生成执行计划极为消耗资源
两种实现 速度差距可能成百上千倍
后者使用了PreparedStatement对象,而前者是普通的Statement对象。PreparedStatement对象不仅包含了SQL语句,而且大多数情况下这个语句已经被预编译过,因而当其执行时,只需DBMS运行SQL语句,而不必先编译。当你需要执行Statement对象多次的时候,PreparedStatement对象将会大大降低运行时间,当然也加快了访问数据库的速度。
这种转换也给你带来很大的便利,不必重复SQL语句的句法,而只需更改其中变量的值,便可重新执行SQL语句。选择PreparedStatement对象与否,在于相同句法的SQL语句是否执行了多次,而且两次之间的差别仅仅是变量的不同。如果仅仅执行了一次的话,在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理,PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
2. PrepareStatement中执行的SQL语句中是可以带参数的,也就是说可以替换变量,尽量采用使用?号的方式传递参数,增加代码的可读性又可以预编译加速;而Statement则不可以。
3.防止SQL注入。在SQL中包含特殊字符或SQL的关键字(如:’ or 1 or ‘)时,Statement将出现不可预料的结果(出现异常或查询的结果不正确),可用PreparedStatement来解决。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
1:创建时的区别:
Statement stm=con.createStatement();
PreparedStatement pstm=con.prepareStatement(sql);
执行的时候:
stm.execute(sql);
pstm.execute();
2: pstm一旦绑定了SQL,此pstm就不能执行其他的Sql,即只能执行一条SQL命令。
stm可以执行多条SQL命令。
3: 对于执行同构的sql(只有值不同,其他结构都相同),用pstm的执行效率比较的高,对于异构的SQL语句,Statement的执行效率要高。
4:当需要外部变量的时候,pstm的执行效率更高.
下面是一个statement的列子 :
Java代码
package com.JDBC.proc;
import java.sql.*;
public class StatementTest {
public static void main(String args[]){
Connection conn=null;
Statement stm=null;
ResultSet rs=null;
try {
conn=DBTool.getConnection();
String sql="select EmpNo,EName from emp " +
"where empNo=7499";
stm=conn.createStatement();
rs=stm.executeQuery(sql);
while(rs.next()){
System.out.println(rs.getInt(1)+"---"+rs.getString(2));
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally{
DBTool.release(rs, stm, conn);
}
}
}
他的主要作用阐述Statement的用法。
下面是关于prepareStatement的列子:
Java代码
package com.JDBC.proc;
import java.sql.*;
public class PrepareStatement {
public static void main(String[] args){
Connection conn=null;
PreparedStatement psmt=null;
ResultSet rs=null;
try {
conn=DBTool.getConnection();
String sql="select EmpNo,Ename " +
"from emp " +
"where EmpNo=?";
psmt=conn.prepareStatement(sql);
psmt.setInt(1, 7499);
rs=psmt.executeQuery();
while(rs.next()){
System.out.println(rs.getInt(1)+"---"+rs.getString(2));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally{
DBTool.release(rs, psmt, conn);
}
}
}
转载于:https://blog.51cto.com/5563447/1294837
JDBC中Statement与PreparedStatement的区别相关推荐
- sql语句和java的关系_java中Statement 与 PreparedStatement接口之间的关系和区别
Statement 和 PreparedStatement之间的关系和区别. 关系:PreparedStatement继承自Statement,都是接口 区别:PreparedStatement可以使 ...
- 数据库SQL Server2012笔记(八)——Statement与PreparedStatement的区别,JDBC方式操作数据库...
1.Statement与PreparedStatement的区别 1)都可用于 把sql语句从java程序中发送到制定数据库,并执行sql语句. 2)区别 直接使用Statement,驱动程序一般不 ...
- Statement与PreparedStatement的区别
Statement与PreparedStatement的区别 PreparedStatement预编译SQL语句,性能好. PreparedStatement无序拼接SQL语句,编程更简单. Prep ...
- 浅析Statement和PreparedStatement的区别
当我们使用java程序来操作sql server时会使用到Statement和PreparedStatement,俩者都可以用于把sql语句从java程序中发送到指定数据库,并执行sql语句.那么如何 ...
- 关于jdbc中Statement
关于jdbc中Statement 一. PreparedStatement 接口继承 Statement , PreparedStatement 实例包含已编译的 SQL 语句:Statement每次 ...
- 浅谈 JDBC 中 CreateStatement 和 PrepareStatement 的区别与优劣。
浅谈 JDBC 中 CreateStatement 和 PrepareStatement 的区别与优劣.
- JDBC 中 CreateStatement 和 PrepareStatement 的区别
在学习JDBC的时候碰到一个问题.获取向数据库发送sql语句的statement对象有两种类似的接口这两个接口没有本质上的区别.都是通过对象调用executeQuery方法来执行SQL语句.说是Cre ...
- Statement和PreparedStatement的区别及联系
两者之间的联系: Statement和PreparedStatement两者都是用来执行SQL查询语句的API之一 PreparedStatement接口继承了Statement接口 两者之间的区别: ...
- 由数据库对sql的执行说JDBC的Statement和PreparedStatement
1.每一种数据库都会尽最大努力对预编译语句提供最大的性能优化.因为预编译语句有可能被重复调用.所以语句在被DB的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要 ...
最新文章
- CentOS6.9编译安装postgresql和php的pdo_pgsql,pgsql扩展
- TLS就是SSL的升级版+网络安全——一图看懂HTTPS建立过程——本质上就是引入第三方监管,web服务器需要先生成公钥和私钥,去CA申请,https通信时候浏览器会去CA校验CA证书的有效性...
- python程序员收入-python收入
- php mysql 登录注销_laravel 实现用户登录注销并限制功能
- 微信好友大揭秘,使用Python抓取朋友圈数据,通过人脸识别全面分析好友,一起看透你的“朋友圈”...
- Serverless 实战 —— 快速搭建 SpringBoot 应用
- Qt5.7+Opencv2.4.9人脸识别(六)Tcp,Mysql,3DES,XML综合
- rose顺序图转换为协作图_如何用GX Developer编程软件编写SFC顺序功能图?
- DM642 视频采集基本架构
- 利用级数求和推导泊松分布的期望方差
- 每天一点正则表达式积累(五)
- html5在线裁剪,HTML5和JQuery裁剪图像实时预览缩略图并上传
- 工作效率低,怎么办?
- win2008 有几个版本?区别是什么?
- 简单大学生静态HTML网页作品 HTML5+CSS大作业——圣诞节节日(7页) 带轮播特效
- 香橙派Zero2电视盒子开发板连接HDMI如何修改分辨率
- 互斥锁深度理解与使用
- Android 在分享列表添加自己的应用
- Spring Security(12)——Remember-Me功能
- 层次模型,网状模型,关系模型
热门文章
- NFS运维二班--梁瑞
- vue - 官方 - 上手
- unity案例入门(二)(坦克大战)
- Windows计算机功能Java源码
- sql取出某一列不重复数据的ID解决办法
- ArcGIS网络分析之Silverlight客户端最近设施点分析(四)
- 大型ERP等数据库系统常见几种设计------(转)
- 如何调用 DLL 中的函数
- 桂林电子科技大学C语言大作业,桂林电子科技大学c语言程序设计习题集及答案qvzaewzm.doc...
- 无法加载具有重复项目项的项目: pathstroke.cpp 作为 ClCompile 且作为 None 项类型包括在其中。