关于PreparedStatement和Statement具体区别
1:
我们先从这两个单词进行初步的讲解,Prepared(准备好的, 精制的),从这里可以知道PreparedStatement是预先编译的语句,而Statement则不是预先编译的,在DBMS中处理管理中Statement是要进行语法、语义的,而PreparedStatement则不要。
2:
PrepareStatement中执行的SQL语句中是可以带参数的,而Statement则不可以。
比如:
PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00);
pstmt.setInt(2, 110592);
pstmt. executeUpdate();
3:
当处理批量SQL语句时,这个时候就可以体现PrepareStatement的优势,由于采用Cache机制,则预先编译的语句,就会放在Cache中,下次执行相同SQL语句时,则可以直接从Cache中取出来。
关于PreparedStatement 预编译的语句具体是放在哪儿?为什么能提升性能?
先看看oracle的sql执行细节:
oracle 执行sql时,首先要分析sql生成查询计划,具体有:分析sql的合法性(到数据库schema中查询),决定使用某个的哪段索引(好像是这样说的)... ...,然后在第一次查询时,用物理读,其后相同的查询计划都是逻辑读,是到缓存里面读。
PreparedStatement是不是有利于oracle生成查询计划,或许还有别的帮助,所以提高了性能。
但有一点是肯定的,PreparedStatement一定需要driver具体实现才行,Prepared是缓存在数据库端的。
所以说,PreparedStatement预编译的sql语句是放在数据库端的缓存里面,而放到缓存,有利于sql生成查询计划。
4:线程安全
当处理公共Web站点上的用户传来的数据的时候,安全性的问题就变得极为重要。传递给PreparedStatement的字符串参数会自动被驱动器忽略。最简单的情况下,这就意味着当你的程序试着将字符串“D'Angelo”插入到VARCHAR2中时,该语句将不会识别第一个“,”,从而导致悲惨的失败。几乎很少有必要创建你自己的字符串忽略代码。
在Web环境中,有恶意的用户会利用那些设计不完善的、不能正确处理字符串的应用程序。特别是在公共Web站点上,在没有首先通过PreparedStatement对象处理的情况下,所有的用户输入都不应该传递给SQL语句。此外,在用户有机会修改SQL语句的地方,如HTML的隐藏区域或一个查询字符串上,SQL语句都不应该被显示出来。
分享到:
相关推荐
prepareStatement和Statement的区别 prepareStatement和Statement是 Java 中两个常用的数据库操作接口,它们都可以用来执行 SQL 语句,但是它们之间有着明显的区别。 首先,从创建时的区别开始,Statement 需要...
### 关于PreparedStatement插入Date类型值的方法 在Java编程语言中,使用`PreparedStatement`来执行SQL语句是一种常见的操作数据库的方式。这种方式不仅可以提高程序的性能,还可以有效地防止SQL注入攻击。当我们在...
在使用Java语言进行数据库交互时,JDBC(Java Database Connectivity)是实现...总之,理解Statement和PreparedStatement之间的区别,能够帮助我们更好地使用JDBC进行数据库操作,从而编写出更加高效、安全的Java程序。
一种可能的方法是通过日志配置,例如,启用MySQL的`Statement`和`PreparedStatement`日志,这样在执行时会打印出详细的SQL语句。 另外,开发工具如IntelliJ IDEA、Eclipse等,或者数据库管理工具如MySQL Workbench...
#### 二、`PreparedStatement`与`Statement`的区别 1. **预编译的SQL语句**: - `PreparedStatement`实例包含已编译的SQL语句,这意味着当创建此类对象时,SQL语句会被解析和编译,而不是在每次执行时都进行解析。...
在Java编程语言中,`PreparedStatement`是`java.sql`包中的一个接口,它继承自`Statement`类,并提供了预编译SQL语句的功能。预编译SQL语句的主要优势在于提高了执行效率和安全性。尤其在处理动态查询或频繁执行相同...
最后,`oracle preparedStatements.ppt`可能是一个关于Oracle数据库和`PreparedStatement`的演示文稿,它可能包含了更详细的Oracle特定的使用技巧和最佳实践,包括如何优化`PreparedStatement`的性能,以及如何与...
在Java的JDBC(Java Database Connectivity)中,与数据库交互的核心接口是Statement和PreparedStatement。这两个接口都是用于执行SQL语句的,但它们在特性和效率上有所不同。 Statement接口是最基本的SQL执行方式...
2. 批量处理:使用`Statement`或`PreparedStatement`的`addBatch()`和`executeBatch()`方法进行批量SQL操作,减少网络通信次数。 3. 数据库连接池:通过连接池管理数据库连接,避免频繁创建和关闭连接,提高系统效率...
在 Java 的数据库编程中,`PreparedStatement` 是一个非常重要的类,它继承自 `Statement` 类,并提供了更高级的功能来处理 SQL 语句,尤其是在处理参数化查询时更为高效和安全。下面我们将详细介绍 `...
在编写数据库操作代码时,我们通常会遇到两种类型的SQL语句对象:Statement和PreparedStatement。这两个类都属于java.sql包,但它们在功能、安全性和性能上存在显著差异。 1. Statement对象: Statement是JDBC中最...
3. 创建Statement或PreparedStatement:Statement用于执行SQL语句,PreparedStatement可以预编译SQL,提高性能和安全性。 4. 执行SQL:Statement或PreparedStatement对象的executeQuery()或executeUpdate()方法用于...
PreparedStatement是Statement的子接口,它的主要特点是预编译SQL语句。在创建PreparedStatement对象时,我们会提供一个包含占位符(如?)的SQL模板,然后在执行时传入具体的参数值。这样,数据库会预先解析并优化这...
它是所有数据库操作的基础,所有的`Statement`和`PreparedStatement`实例都是通过`Connection`实例创建的。`Connection`实例封装了与数据库通信所需的底层网络连接,并提供了多种方法来控制连接状态,如打开、关闭...
在JSP(Java Server Pages)开发中,数据库操作是一个重要的...因此,在涉及到频繁执行的数据库操作,或者需要执行的SQL语句中包含有用户输入数据时,推荐使用PreparedStatement对象,以提高代码的执行效率和安全级别。
总结来说,Statement 适用于简单的、一次性执行的 SQL 语句,而 PreparedStatement 提供了更高的安全性和性能,是执行动态 SQL 语句的首选。CallableStatement 则专用于调用数据库存储过程,提供了一种标准的方式来...
PreparedStatement PreparedStatement 是 Statement 的扩展,主要用于执行预编译的 SQL 语句。它的主要优点和缺点如下: 优点: - PreparedStatement 支持参数化查询,通过占位符(问号)来代替具体的值,避免了 ...
示例代码中的StatementTest类展示了如何使用Statement执行SQL查询,而PrepareStatement类则演示了PreparedStatement的用法,包括预编译SQL和设置参数。 总结来说,Statement适用于执行简单的、不重复或少有变化的...
在这个例子中,我们可以有两个具体的工厂类:`MysqlFactory` 和 `OracleFactory`。这两个工厂类分别负责创建与MySQL和Oracle数据库交互的对象,如数据库连接、预编译的SQL语句等。例如,`MysqlFactory`可能会创建`...
其中,DriverManager负责管理数据库驱动,Connection代表数据库连接,Statement和PreparedStatement用于执行SQL语句,ResultSet存储查询结果。 根据驱动程序的实现方式,JDBC驱动分为4种类型: - Type 1:纯Java ...