关键字: statement 与preparestatement 区别
1.
PreparedStatement对象不仅包含了SQL语句,而且大多数情况下这个语句已经被预编译过,因而当其执行时,只需DBMS运行SQL语句,而不必先编译。当你需要执行Statement对象多次的时候,PreparedStatement对象将会大大降低运行时间,当然也加快了访问数据库的速度。这种转换也给你带来很大的便利,不必重复SQL语句的句法,而只需要更改其中变量的值,便可重新执行SQL语句。选择 PreParedStatement对象与否,在于相同的句法的SQL语句是否执行了多次,而且两次之间的差别仅仅是变量不同,如果仅仅执行了一次的话,它应该和普通的对象毫无差异,体现不出她预编译的优越性。
2.prepareStatement是把你的sql语句预先“编译”好,每次只替换定义的变量,
他的作用是减少与数据库的通信量,从而加快执行速度,主要用在循环执行SQL语句
3.
prepareStatement已经予编译,速度比Statement快些
prepareStatement解决有关特殊字符插入到数据库的问题。如(',",),?)
4.
Statement ─ 由方法 createStatement 所创建。Statement 对象用于发送简单的 SQL 语句。
PreparedStatement ─ 由方法 prepareStatement 所创建。PreparedStatement 对象用于发送带有一个或多个输入参数( IN 参数)的 SQL 语句。PreparedStatement 拥有一组方法,用于设置 IN 参数的值。执行语句时,这些 IN 参数将被送到数据库中。PreparedStatement 的实例扩展了 Statement ,因此它们都包括了 Statement 的方法。PreparedStatement 对象有可能比 Statement 对象的效率更高,因为它已被预编译过并存放在那以供将来使用。
CallableStatement ─ 由方法 prepareCall 所创建。CallableStatement 对象用于执行 SQL 储存程序 ─ 一组可通过名称来调用(就象函数的调用那样)的 SQL 语句。CallableStatement 对象从 PreparedStatement 中继承了用于处理 IN 参数的方法,而且还增加了用于处理 OUT 参数和 INOUT 参数的方法。
以下所列提供的方法可以快速决定应用哪个 Connection 方法来创建不同类型的 SQL 语句:
createStatement 方法用于:
简单的 SQL 语句(不带参数)
prepareStatement 方法用于:
带一个或多个 IN 参数的 SQL 语句
经常被执行的简单 SQL 语句
prepareCall 方法用于:
调用已储存过程
Statement用法
stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");
prepareStatement用法
perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");
perstmt.setString(1,var1);
perstmt.setString(2,var2);
perstmt.setString(3,var3);
perstmt.setString(4,var4);
perstmt.executeUpdate();
很多人就用第二种方法!
Statement没有设置缓存,prepareStatement有,并且一次性可以插入n个数据
利用PreparedStatement对象提高数据库的总体效率
在使用PreparedStatement对象执行SQL命令时,命令被数据库进行解析和编译,然后被放到命令缓冲区。然后,每当执行同一个 PreparedStatement对象时,它就会被再解析一次,但不会被再次编译。在缓冲区中可以发现预编译的命令,并且可以重新使用。在有大量用户的企业级应用软件中,经常会重复执行相同的SQL命令,使用PreparedStatement对象带来的编译次数的减少能够提高数据库的总体性能。如果不是在客户端创建、预备、执行PreparedStatement任务需要的时间长于Statement任务,我会建议在除动态SQL命令之外的所有情况下使用PreparedStatement对象
分享到:
相关推荐
prepareStatement和Statement的区别 prepareStatement和Statement是 Java 中两个常用的数据库操作接口,它们都可以用来执行 SQL 语句,但是它们之间有着明显的区别。 首先,从创建时的区别开始,Statement 需要...
PrepareStatement是JDBC提供的一种预编译的SQL语句,它可以提高数据库操作的效率和安全性。本资源主要涵盖了使用JDBC PrepareStatement进行MySQL数据库操作的各种场景,包括基本的查询、更新以及批量处理。 首先,...
**JDBC(用PrepareStatement实现)** Java Database Connectivity (JDBC) 是Java平台中的一个标准API,用于在Java应用程序和各种数据库之间建立桥梁。它允许Java开发者执行SQL语句,进行数据查询、更新和删除等操作。...
要创建一个 `PreparedStatement` 对象,首先需要通过 `Connection` 对象调用 `prepareStatement` 方法,并传入一个 SQL 语句字符串。例如: ```java // 假设 con 是已建立的 Connection 对象 String sql = "UPDATE ...
PreparedStatement pstmt = con.prepareStatement("SELECT * FROM users WHERE age = ?"); pstmt.setInt(1, age); ResultSet rs = pstmt.executeQuery(); ``` 在这种情况下,即使我们多次执行该语句并更改`age`的值...
现金流量表(Statement of Cash Flows)是财务报告中的一个重要组成部分,它反映了企业在一定时期内的现金流入和流出情况。在会计实务中,现金流量表通常采用两种方法来编制:直接法(Direct Method)与间接法...
PreparedStatement ps = connection.prepareStatement(sql); ps.setInt(1, 10); ``` 在这个例子中,我们想知道实际执行的SQL语句是"SELECT * FROM table WHERE id = 10"。为了实现这个需求,我们可以自定义一个辅助...
现金流量表(Cashflow Statement)是企业财务报告的重要组成部分,用于揭示企业在一定会计期间内现金的流入和流出情况,展示了公司的经营、投资和筹资活动对现金的影响。它可以帮助投资者、管理层和其他利益相关者...
perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)"); perstmt.setString(1,var1); perstmt.setString(2,var2); perstmt.setString(3,var3); perstmt.setString(4,var4)...
MySQL prepare语法: PREPARE statement_name FROM preparable_SQL_statement; /*定义*/ EXECUTE statement_name [USING @var_name [, @var_name] …]; /*执行预处理语句*/ {DEALLOCATE | DROP} PREPARE statement_...
【数据库原理:为什么PrepareStatement性能更好更安全】 在数据库编程中,我们经常遇到两种执行SQL语句的方法:Statement和PreparedStatement。尽管Statement看起来更简洁,但在实际应用中,尤其是在使用ORM框架如...
In Oracle Metalink (Oracle's support site - Note ID 736273.1) I found that this is a bug in JDBC adapter (version 10.2.0.0.0 to 11.1.0.7.0) that when you call preparedStatement with more than 7 ...
JDBC 中 Statement 和 PrepareStatement 的使用讲解 Statement 对象是用来执行 SQL 语句的接口,提供了基本的 SQL 语句执行功能。PrepareStatement 是 Statement 的子接口,提供了预编译的功能,可以提高性能和安全...
MySQL官方将prepare、execute、deallocate统称为PREPARE STATEMENT,我习惯称其为【预处理语句】,其用法十分简单,下面话不多说,来一起看看详细的介绍吧。 示例代码 PREPARE stmt_name FROM preparable_stmt ...
PreparedStatement pstmt = con.prepareStatement("INSERT INTO Table1 (a, b) VALUES (?, ?)"); pstmt.setInt(1, 1); pstmt.setString(2, "value"); pstmt.executeUpdate(); ``` ### CallableStatement `...
PreparedStatement pstmt = conn.prepareStatement(sql); // 使用PreparedStatement防止SQL注入 pstmt.setString(1, "John Doe"); pstmt.setString(2, "john.doe@example.com"); int rowsInserted = pstmt....
PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setString(1, value1); pstmt.setString(2, value2); int rowsAffected = pstmt.executeUpdate(); ``` 在这个例子中,"?"是占位符,`setString...
PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "John Doe"); pstmt.setInt(2, 30); pstmt.executeUpdate(); ``` 3. **比较与选择** - **性能**:由于预编译,`...
PreparedStatement pstmt = connection.prepareStatement("INSERT INTO my_table (date_column) VALUES (?)"); pstmt.setDate(1, new java.sql.Date(System.currentTimeMillis())); // 使用当前时间创建Date对象 ...
JAVA连接FileMaker完整工程 包函FileMaker数据库Java连接驱动 修改工程中的FileMaker安装地址就 可以用JAVA操作FileMaker ... prepareStatement = con.prepareStatement(insertSQL); b = prepareStatement.execute();