Statement与PreparedStatement的区别

PreparedStatement预编译SQL语句,性能好。

PreparedStatement无序拼接SQL语句,编程更简单.

PreparedStatement可以防止SQL注入,安全性好。

Statement由方法createStatement()创建,该对象用于发送简单的静态的SQL语句。

PreparedStatement由方法preparedStatement()创建,该对象用于发送带有一个
或多个输入参数的SQL语句。该方法继承了Statement的所有方法。并进行了扩展。
SQL语句使用“?”作为数据占位符,使用setXxx()方法设置数据。

setXxx()方法的第一个参数谁要设置参数的序数位置,第二个参数时设置给该参数的值。

//Statement的用法
int id=111;
String sql="selsect * from user where id="+id;
Statement st=connection.CreateStatement();
ResultSet rs=st.executeQuery(sql);

//PreparedStatement的用法
//PreparedStatement可替换变量(在SQL语句中可以包含?)
String sql="select * from user where id=?";
PreparedStatement ps=connection.preparedStatement(sql);//sql在这里进行预编译
int id =111;
ps.setInt(1,id);//为sql传入参数
ResultSet rs=ps.executeQuery();//这里不需要sql,因为上面预编译过

1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程
2.使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
3.statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得,   preparedstatement支持批处理
4.
Code Fragment 1:

String updateString = "UPDATE COFFEES SET SALES = 75 " + "WHERE COF_NAME LIKE ′Colombian′";
stmt.executeUpdate(updateString);

Code Fragment 2:

PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? ");
updateSales.setInt(1, 75);
updateSales.setString(2, "Colombian");
updateSales.executeUpdate();

片断2和片断1的区别在于,后者使用了PreparedStatement对象,而前者是普通的Statement对象。PreparedStatement对象不仅包含了SQL语句,而且大多数情况下这个语句已经被预编译过,因而当其执行时,只需DBMS运行SQL语句,而不必先编译。当你需要执行Statement对象多次的时候,PreparedStatement对象将会大大降低运行时间,当然也加快了访问数据库的速度。
这种转换也给你带来很大的便利,不必重复SQL语句的句法,而只需更改其中变量的值,便可重新执行SQL语句。选择PreparedStatement对象与否,在于相同句法的SQL语句是否执行了多次,而且两次之间的差别仅仅是变量的不同。如果仅仅执行了一次的话,它应该和普通的对象毫无差异,体现不出它预编译的优越性。

5.执行许多SQL语句的JDBC程序产生大量的Statement和PreparedStatement对象。通常认为PreparedStatement对象比Statement对象更有效,特别是如果带有不同参数的同一SQL语句被多次执行的时候。PreparedStatement对象允许数据库预编译SQL语句,这样在随后的运行中可以节省时间并增加代码的可读性。

转载于:https://www.cnblogs.com/liubin1988/p/8999159.html

Statement与PreparedStatement的区别相关推荐

  1. 数据库SQL Server2012笔记(八)——Statement与PreparedStatement的区别,JDBC方式操作数据库...

    1.Statement与PreparedStatement的区别 1)都可用于  把sql语句从java程序中发送到制定数据库,并执行sql语句. 2)区别 直接使用Statement,驱动程序一般不 ...

  2. 浅析Statement和PreparedStatement的区别

    当我们使用java程序来操作sql server时会使用到Statement和PreparedStatement,俩者都可以用于把sql语句从java程序中发送到指定数据库,并执行sql语句.那么如何 ...

  3. Statement和PreparedStatement的区别/PreparedStatement和Statement比较的优点

    Statement 和 PreparedStatement之间的关系和区别.     关系:PreparedStatement继承自Statement,都是接口     区别:PreparedStat ...

  4. Statement和PreparedStatement的区别及联系

    两者之间的联系: Statement和PreparedStatement两者都是用来执行SQL查询语句的API之一 PreparedStatement接口继承了Statement接口 两者之间的区别: ...

  5. JDBC中Statement与PreparedStatement的区别

    http://www.blogjava.net/redcoatjk/archive/2012/07/20/383583.html 1. statement每次执行sql语句,相关数据库都要执行sql语 ...

  6. JDBC中的Statement 和PreparedStatement的区别?

    PreparedStatement 继承于 Statement Statement 一般用于执行固定的没有参数的SQL PreparedStatement 一般用于执行有?参数预编译的SQL语句. P ...

  7. java Statement与preparedStatement的区别

    1.数据库执行preparedStatement的时候会预编译,下次再执行此sql语句的时候,数据库端将不会再进行预编译了,而直接去数据库的缓存区,提高访问的效率. 2.在任何时候都不要使用State ...

  8. JDBC中的Statement和PreparedStatement的区别

    PreparedStatement是什么?PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement ...

  9. JDBC自我复习之Statement和PreparedStatement的区别

    一.Statement 1.1 介绍 Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句. Statement对象,用于执 ...

最新文章

  1. 同一目录下有大量文件会影响效率吗_到底是什么原因才导致 select * 效率低下的?
  2. [渝粤教育] 中国地质大学 地球科学概论 复习题 (2)
  3. 机器学习算法总结--K近邻
  4. 发些c/c++/vc/驱动/网络安全的好书和资料
  5. 2020传道(原中国开源圈)开源寄语
  6. 中文核心期刊目录(2008年最新版)
  7. 《数据结构》天勤和王道 第五章 树
  8. 你知道几个中文编程语言,快来瞧瞧这些有趣的中文编程语言。
  9. 飞控计算机的作用,自动飞控计算机测试系统
  10. Linux 驱动 IIC_MPU6050
  11. MOSS Project Server 2007
  12. 乱记春秋-或跃在渊 (苏阳飘零记)
  13. centos7 搭建三主三从 redis5.0集群
  14. CSS - 语法规则
  15. php 网站访问统计插件,帝国CMS教程_网站访问统计插件使用教程_好特教程
  16. 男人至少的道德底线(男女都该看)
  17. 《控制系统设计指南》_George Ellis著_部分章节读书笔记
  18. Chapter8.3:控制系统校正的根轨迹法
  19. 探究 EIP-4488 —— Rollup 助燃剂
  20. mac m1关闭sip系统完整性保护csrutil disable,如何禁用mac m1的系统完整性保护

热门文章

  1. Java File类void deleteOnExit()方法(带示例)
  2. 线性结构节点类型(三)
  3. 栈应用_将算式转成按运算符优先级分布(代码、分析、汇编)
  4. python安全攻防---爬虫基础---get和post提交数据
  5. 【桶】220.存在重复元素 III 【LeetCode】
  6. 链表相加 2. 两数相加
  7. c++中的继承--3(多继承问题,菱形继承)
  8. shared_ptr的一些尴尬
  9. 为什么要学习汇编语言?如何正确学习汇编语言?
  10. gcc编译器的整个工作过程