`
immortal2512
  • 浏览: 44845 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

PrepareStatement和Statement的区别(SQL执行优化)

    博客分类:
  • java
SQL 
阅读更多

看下面两段程序片断:

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语句是否执行了多次,而且两次之间的差别仅仅是变量的不同。如果仅仅执行了一次的话,它应该和普通的对象毫无差异,体现不出它预编译的优越性。

补充:

1. 数据库在执行sql语句的时候如果使用PreparedStatement语句会有一点优势:因为数据库会   PreparedStatement 语句进行预编译,下次执行相同的sql语句时,数据库端不会再进行预编译了,而直接用数据库的缓冲区,提高数据访问的效率(但尽量尽量采用使用?号的方式传递参数),如果sql语句只执行一次,以后不再复用,则建议采用StatemenStatement不会对sql进行预编译。

2. 另外使用PrepareStatement还有一个好处,不用对传入的字符串进行转义。

3.PreparedStatement 能有效防止Sql注入攻击,速度较快,但失于灵活.

分享到:
评论

相关推荐

    prepareStatement和Statement的区别

    prepareStatement和Statement是 Java 中两个常用的数据库操作接口,它们都可以用来执行 SQL 语句,但是它们之间有着明显的区别。 首先,从创建时的区别开始,Statement 需要通过 Connection 对象的 createStatement...

    JDBC PrepareStatement 使用(附各种场景 demo)

    PrepareStatement是JDBC提供的一种预编译的SQL语句,它可以提高数据库操作的效率和安全性。本资源主要涵盖了使用JDBC PrepareStatement进行MySQL数据库操作的各种场景,包括基本的查询、更新以及批量处理。 首先,...

    JDBC(用PrepareStatement实现)

    // 设置参数和执行 } catch (SQLException e) { e.printStackTrace(); } ``` 6. **PrepareStatement的优势** - **性能提升**:预编译的SQL语句可以减少解析和编译的时间。 - **安全防护**:防止SQL注入攻击...

    利用JDBC的PrepareStatement打印真实SQL的方法详解

    PreparedStatement ps = connection.prepareStatement(sql); ps.setInt(1, 10); ``` 在这个例子中,我们想知道实际执行的SQL语句是"SELECT * FROM table WHERE id = 10"。为了实现这个需求,我们可以自定义一个辅助...

    java数据库连接PrepareStatement

    1. **预编译 SQL 语句**:在执行 SQL 语句之前,数据库会对其进行解析和优化,这可以显著提高执行效率。 2. **参数化查询**:允许使用占位符(通常为 `?`)来表示动态值,这些值可以在运行时被替换,从而提高了代码...

    MySQL prepare语句的SQL语法

    MySQL prepare语法: PREPARE statement_name FROM preparable_SQL_statement; /*定义*/ EXECUTE statement_name [USING @var_name [, @var_name] …]; /*执行预处理语句*/ {DEALLOCATE | DROP} PREPARE statement_...

    06丨数据库原理:为什么PrepareStatement性能更好更安全?.pdf

    综上所述,PreparedStatement的性能优势在于其预编译机制、参数绑定和执行计划缓存,同时在安全性方面,通过占位符方式降低了SQL注入的风险。这些特点使得PreparedStatement成为Java等编程语言中访问数据库的推荐...

    statement和prepared区别

    PreparedStatement pstmt = con.prepareStatement("SELECT * FROM users WHERE age = ?"); pstmt.setInt(1, age); ResultSet rs = pstmt.executeQuery(); ``` 在这种情况下,即使我们多次执行该语句并更改`age`的值...

    hibernate执行原生sql语句

    PreparedStatement ps = conn.prepareStatement(sql); ps.execute(); ps.close(); session.flush(); return null; } }); } ``` 在上面的代码中,我们使用 `HibernateCallback` 接口来执行原生 SQL 语句,该...

    如何获得PreparedStatement最终执行的sql语句

    PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setString(1, "John Doe"); pstmt.setString(2, "john.doe@example.com"); pstmt.executeUpdate(); ``` 要获取这个预编译语句在执行时的具体...

    JDBC执行SQL操作.docx

    PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1, "男"); ResultSet rs = pstmt.executeQuery(); ``` 3. CallableStatement:用于调用数据库的存储过程。例如: ```java String call = "...

    通过SQL Server Profiler来监视分析死锁

    SQL Server Profiler是SQL Server的一个重要工具,用于跟踪和记录服务器活动,包括查询执行、索引使用、锁定等。在监视死锁时,我们可以通过创建特定的跟踪模板来捕获与死锁相关的事件。 1. **启动SQL Server ...

    sql查询优化(提高MySQL数据库查询效率的几个技巧)

    * 优化 SQL 语句:使用 EXPLAIN 语句来分析 SQL 语句的执行计划,优化查询语句。 * 使用存储过程:使用存储过程可以将频繁查询的操作封装起来,提高查询效率。 * 优化数据库结构:优化数据库结构,例如,使用合适的...

    java中PreparedStatement和Statement的区别

    Java 中的 PreparedStatement 和 Statement 都是用于执行 SQL 语句的接口,但是它们之间存在一些关键的区别。 首先,从数据库执行 SQL 语句的角度来看,使用 PreparedStatement 语句可以提高数据库访问的效率。这是...

    JDBC中Statement和Preparement的使用讲解

    PrepareStatement 对象可以预编译 SQL 语句,提高性能和安全性。下面是一个简单的例子: ```java PreparedStatement pstmt = conn.prepareStatement("insert into student_table values(null, ?, 90)"); pstmt....

    JDBC+注册驱动+获取连接+定义sql语句+获取执行sql对象+执行sql

    有了SQL语句和执行对象,我们就可以执行SQL了。对于`Statement`,可以使用`executeQuery()`(返回结果集)或`executeUpdate()`(无结果集,比如INSERT, UPDATE, DELETE)。对于`PreparedStatement`,同样有对应的`...

    SQL_执行语句(查询和修改)

    ### SQL执行语句(查询和修改)知识点详解 #### 一、SQL执行语句概述 在数据库管理系统(DBMS)中,SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准语言。SQL提供了强大的数据...

    JDBC从入门到放弃02-JDBC的Statement数据库增加和删除

    PreparedStatement pstmt = conn.prepareStatement(sql); // 使用PreparedStatement防止SQL注入 pstmt.setString(1, "John Doe"); pstmt.setString(2, "john.doe@example.com"); int rowsInserted = pstmt....

    Pr_St_insert.rar_statement

    - **性能优化**: 预编译的SQL语句在数据库中只需要编译一次,后续的执行只需绑定参数和执行编译好的计划,提高了执行速度。 - **可读性与易维护**: 使用占位符(如 "?"),使得SQL语句更易于阅读和理解,同时也方便...

    sql server jdbc 驱动包

    PreparedStatement pstmt = conn.prepareStatement("INSERT INTO myTable VALUES (?, ?)"); pstmt.setInt(1, 1); pstmt.setString(2, "Value1"); pstmt.addBatch(); pstmt.setInt(1, 2); pstmt.setString(2, ...

Global site tag (gtag.js) - Google Analytics