- 浏览: 170228 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (193)
- Axis2 (10)
- Andriod (2)
- Java (22)
- Eclipse (2)
- 程序人生 (3)
- Windows (1)
- Sql Server 2005/2008 (7)
- 健身 (2)
- Log4j (1)
- Ant (1)
- Fatjar (2)
- 国际化 (1)
- Linux (3)
- JDBC (1)
- Oracle (2)
- 各种报错 (4)
- SWT (5)
- Tomcat (2)
- 车辆管理 (1)
- SVN (2)
- Spring (5)
- 域名服务器 (0)
- HaoWaYa (1)
- FTP (1)
- 集散中心 (1)
- 专业知识 (1)
- 面试准备 (19)
- 设计模式 (22)
- Junit (1)
- 软件下载 (3)
- 深入理解Java虚拟机 (3)
- 数据结构 (4)
- 雅思 托福 (0)
- UML (1)
- Maven (1)
- CV (1)
- ServiceMix (1)
- 电子书 (5)
- Struts1/2 (4)
- DOM W3C DHTML (3)
- Jawr (1)
- LoadRunner (1)
- Java反编译 (0)
- 英语学习 (0)
- 技术书籍 (1)
- Cygwin (0)
- ibatis (1)
- 数据库 (1)
- jQuery (0)
- s (2)
- 源代码项目 (5)
- JSRs (0)
- JCP (0)
- XML (2)
- Dojo (3)
- Effective Java (1)
- 一站到底 (3)
- JavaScript (6)
- DB2 (1)
- 刷机 (1)
- 字符 (1)
- Dynamic Web Project (1)
- 股市日记 (1)
- 代码片段 (0)
- CSS (1)
- PDF (0)
- 英语口语 (1)
- 乒乓球 (1)
- 体检 (0)
- 送花 (0)
- 面试准备-再战江湖 (5)
- ddq (0)
- sss (0)
- ssssss (0)
- 2020面试 (0)
最新评论
-
samsongbest:
Copperfield 写道你的目标很远大,佩服~惭愧,都忘了 ...
人生目标 -
Copperfield:
你的目标很远大,佩服~
人生目标
http://hi.baidu.com/hi521/blog/item/68b7c5ce018f910192457ea4.html/cmtid/8dbee6fedcfb043e5d60085d
Statement和PreparedStatement之间的区别
2007年07月18日 星期三 9:20
转自: http://blog.sina.com.cn/u/3e9d2b3501000a52
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语句,这样在随后的运行中可以节省时间并增加代码的可读性。
然而,在Oracle环境中,开发人员实际上有更大的灵活性。当使用Statement或PreparedStatement对象时,Oracle数据库 会缓存SQL语句以便以后使用。在一些情况下,由于驱动器自身需要额外的处理和在Java应用程序和Oracle服务器间增加的网络活动,执行 PreparedStatement对象实际上会花更长的时间。
然而,除了缓冲的问题之外,至少还有一个更好的原因使我们在企业应用程序中更喜欢使用PreparedStatement对象,那就是安全性。传递给 PreparedStatement对象的参数可以被强制进行类型转换,使开发人员可以确保在插入或查询数据时与底层的数据库格式匹配。
当处理公共Web站点上的用户传来的数据的时候,安全性的问题就变得极为重要。传递给PreparedStatement的字符串参数会自动被驱动器忽 略。最简单的情况下,这就意味着当你的程序试着将字符串“D'Angelo”插入到VARCHAR2中时,该语句将不会识别第一个“,”,从而导致悲惨的 失败。几乎很少有必要创建你自己的字符串忽略代码。
在Web环境中,有恶意的用户会利用那些设计不完善的、不能正确处理字符串的应用程序。特别是在公共Web站点上,在没有首先通过 PreparedStatement对象处理的情况下,所有的用户输入都不应该传递给SQL语句。此外,在用户有机会修改SQL语句的地方,如HTML的 隐藏区域或一个查询字符串上,SQL语句都不应该被显示出来。
然而,在Oracle环境中,开发人员实际上有更大的灵活性。当使用Statement或PreparedStatement对象时,Oracle数据库 会缓存SQL语句以便以后使用。在一些情况下,由于驱动器自身需要额外的处理和在Java应用程序和Oracle服务器间增加的网络活动,执行 PreparedStatement对象实际上会花更长的时间。
然而,除了缓冲的问题之外,至少还有一个更好的原因使我们在企业应用程序中更喜欢使用PreparedStatement对象,那就是安全性。传递给 PreparedStatement对象的参数可以被强制进行类型转换,使开发人员可以确保在插入或查询数据时与底层的数据库格式匹配。
当处理公共Web站点上的用户传来的数据的时候,安全性的问题就变得极为重要。传递给PreparedStatement的字符串参数会自动被驱动器忽 略。最简单的情况下,这就意味着当你的程序试着将字符串“D'Angelo”插入到VARCHAR2中时,该语句将不会识别第一个“,”,从而导致悲惨的 失败。几乎很少有必要创建你自己的字符串忽略代码。
在Web环境中,有恶意的用户会利用那些设计不完善的、不能正确处理字符串的应用程序。特别是在公共Web站点上,在没有首先通过 PreparedStatement对象处理的情况下,所有的用户输入都不应该传递给SQL语句。此外,在用户有机会修改SQL语句的地方,如HTML的 隐藏区域或一个查询字符串上,SQL语句都不应该被显示出来。
在执行SQL命令时,我们有二种选择:可以使用PreparedStatement对象,也可以
使用Statement对象。无论多少次地使用同一个SQL命令,PreparedStatement都只对它解析和编译一次。当使用Statement
对象时,每次执行一个SQL命令时,都会对它进行解析和编译。
发表评论
-
摩根面试全过程
2012-06-21 11:09 782http://hi.baidu.com/%D4%DA%C2%B ... -
ana from pwc
2012-05-09 17:06 0mei messon messon619@ ... -
SAP面试
2012-05-03 21:20 02个小时 3道代码题: 1. Shape, Square, ... -
sap jd
2012-04-30 12:18 0W e are hiring developer for o ... -
面试电子书
2012-04-24 16:16 777面试电子书 -
聚集索引和非聚集索引的区别
2012-04-20 09:28 685http://www.cnblogs.com/flashicp ... -
code for citi
2012-04-19 17:18 0说一些你知道的runtime exception? 说一些 ... -
Apache Http Server和Tomcat 之区别
2012-04-19 09:29 594转自:http://blog.csdn.net ... -
ArrayList Victor LinkedList的区别
2012-04-18 13:43 1529ArrayList Victor Linked ... -
浅析Java抽象类和接口的比较
2012-04-18 09:58 660http://www.enet.com.cn/article/ ... -
Servlet生命周期与工作原理
2012-04-17 21:04 655http://www.cnblogs.com/cuiliang ... -
Spring mvc
2012-04-17 20:49 916http://hi.baidu.com/sxgxg/blog/ ... -
Tomcat内存溢出的原因
2012-04-17 20:38 651Tomcat内存溢出的原因 ... -
JAVA中String与StringBuffer的区别
2012-04-17 20:19 843http://blog.csdn.net/yirenti ... -
sse
2012-04-17 19:52 0Sr.Java 1. ... -
Java并发/多线程
2012-04-10 17:03 849Java多线程 实现线程的两种方法: a. 继承Threa ... -
23个设计模式
2012-03-29 14:18 809第一部分 接口型模式 1. Adapter( ... -
Java初始化的顺序
2012-03-28 16:19 675父类静态变量 子类静态变量 进入子类构造方法 进入父类构 ... -
Java内部类
2012-03-28 16:02 780Java内部类 1. 定义普通内部类 package co ... -
<<数据结构>> 内部排序的java实现
2012-03-28 15:57 11451. 插入排序 算法描述: 从左边开始增大序列,把右边 ...
相关推荐
Java 中的 PreparedStatement 和 Statement 都是用于执行 SQL 语句的接口,但是它们之间存在一些关键的区别。 首先,从数据库执行 SQL 语句的角度来看,使用 PreparedStatement 语句可以提高数据库访问的效率。这是...
prepareStatement和Statement是 Java 中两个常用的数据库操作接口,它们都可以用来执行 SQL 语句,但是它们之间有着明显的区别。 首先,从创建时的区别开始,Statement 需要通过 Connection 对象的 createStatement...
在使用Java语言进行数据库交互时,JDBC(Java Database Connectivity)是实现...总之,理解Statement和PreparedStatement之间的区别,能够帮助我们更好地使用JDBC进行数据库操作,从而编写出更加高效、安全的Java程序。
### Connection 和 ...理解它们之间的区别,并根据实际需求选择合适的方法,能够显著提升应用的质量。同时,合理管理`Connection`的生命周期也是至关重要的,这不仅能有效利用资源,还能避免潜在的性能问题和错误。
JDBC 中 PreparedStatement 接口提供的 execute、executeQuery 和 executeUpdate 之间的区别及用法 JDBC 中的 PreparedStatement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。...
在实际开发中,为了提高效率和安全性,我们通常会使用PreparedStatement接口来代替Statement接口。 1. **PreparedStatement简介** PreparedStatement是Statement的一个子接口,它的主要优势在于预编译。预编译的...
3. **Statement**:用于执行SQL查询,分为Statement、PreparedStatement和CallableStatement三种。Statement用于执行静态SQL语句,PreparedStatement允许预编译SQL语句,CallableStatement用于调用存储过程。 4. **...
在 Java 的数据库编程中,`PreparedStatement` 是一个非常重要的类,它继承自 `Statement` 类,并提供了更高级的功能来处理 SQL 语句,尤其是在处理参数化查询时更为高效和安全。下面我们将详细介绍 `...
通过上述内容,我们了解了JDBC的运作机制,掌握了使用Statement和PreparedStatement的关键点,以及如何进行事务管理和结果集处理。这些知识对于开发和维护数据库驱动的Java应用程序具有重要的参考价值。
JDBC的核心在于其API,它包括了DriverManager、Connection、Statement、PreparedStatement和ResultSet等关键组件。 1. DriverManager:DriverManager类是JDBC的核心组件之一,负责管理数据库驱动程序。它提供了加载...
3. Statement和PreparedStatement:Statement用于执行静态SQL语句,而PreparedStatement则用于预编译SQL语句,提供更好的性能和安全性,因为它可以防止SQL注入攻击。 4. ResultSet:当执行查询操作后,结果通常会被...
3. 创建Statement/PreparedStatement对象:根据需求选择创建Statement或PreparedStatement对象。 4. 执行SQL:调用Statement或PreparedStatement的executeQuery()或executeUpdate()方法执行SQL。 5. 处理结果:对于...
2. 批量处理:使用`Statement`或`PreparedStatement`的`addBatch()`和`executeBatch()`方法进行批量SQL操作,减少网络通信次数。 3. 数据库连接池:通过连接池管理数据库连接,避免频繁创建和关闭连接,提高系统效率...
4. **Statement/PreparedStatement**:Statement用于执行静态SQL语句,而PreparedStatement则支持预编译的SQL语句,更安全且效率更高,防止SQL注入。 5. **结果集(ResultSet)**:执行查询操作后返回的数据集,...
1. **Driver Manager**:它是Java应用程序和数据库之间的桥梁,负责管理所有注册的JDBC驱动,并根据提供的数据库URL和连接属性建立到数据库的连接。 2. **JDBC Driver**:这是与特定数据库通信的实现,通常由数据库...
- Statement对象:用于执行SQL查询和更新语句,有三种形式:Statement、PreparedStatement和CallableStatement。 - ResultSet对象:存储查询结果,提供遍历查询结果的方法。 - PreparedStatement:预编译的SQL...
驱动程序是数据库特定的,它实现了Java.sql包中的接口,如Connection、Statement、PreparedStatement和ResultSet等。这些接口是JDBC的核心组成部分,它们定义了与数据库交互的各种方法。 1. **Connection接口**:...
3. **数据库操作**:Statement和PreparedStatement对象用于执行SQL语句,PreparedStatement支持预编译,提高性能并防止SQL注入。 4. **结果集(ResultSet)**:执行查询后返回的结果集,包含了查询的行数据。 5. *...