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

PreparedStatement与Statement性能详细对比

阅读更多
我对PreparedStatement和Statement的性能测试了一下:
 测试代码如下:
java 代码
 
  1. Connection con = getOraConnection();  
  2. String sql = "select id,name from test where id=";  
  3. String tempSql;  
  4. int count = 1000;  
  5. long time = System.currentTimeMillis();  
  6. for (int i = 0; i < count; i++) {  
  7.     Statement st = con.createStatement();  
  8.     tempSql=sql+(int) (Math.random() * 100);  
  9.     st.executeQuery(tempSql);  
  10.     st.close();  
  11. }  
  12. System.out.println("st cost:" + (System.currentTimeMillis() - time));  
  13.   
  14. String psql = "select id,name from test where id=?";  
  15. time = System.currentTimeMillis();  
  16. for (int i = 0; i < count; i++) {  
  17.     int id=(int) (Math.random() * 100);  
  18.     PreparedStatement pst = con.prepareStatement(psql);  
  19.     pst.setBigDecimal(1new BigDecimal(id));  
  20.     pst.executeQuery();  
  21.     pst.close();  
  22. }  
  23.   
  24. System.out.println("pst cost:" + (System.currentTimeMillis() - time));  
  25.   
  26. con.close();  

test表很简单,id int,name varchar(50).
对几种数据库和相应驱动程序进行测试,结果如下(ms):
oracle:        1235    1109
MSSQL2000(JTDS):391    453
MSSQL2000(MS):    453    640
Mysql5:        391    891
PostgreSQL8.1:   1078    1047
结论:
1.单并发情况下,oracle--PostgreSQL--MSSQL--MySQL的性能依次增高;
2.MySQL不支持Prepared Statement特性,已在其驱动程序的文档中证实,所以在MySQL里使用 PreparedStatement的性能尤其低,可以比Statement慢一倍以上。
而MSSQL2000下,PreparedStatement比Statement慢;
Oracle,PostgreSQL对它的支持最好,使用PreparedStatement性能比Statement高。
分享到:
评论
2 楼 gongmingwind 2008-06-24  
用事实说话!
1 楼 meikefu 2008-03-19  
没有发挥预编译的威力,,oracle中应该有50%的性能提升不可能只提高那么一点PreparedStatement pst = con.prepareStatement(psql);
for (int i = 0; i < count; i++) {  
    int id=(int) (Math.random() * 100);  
        pst.setBigDecimal(1, new BigDecimal(id));  
    pst.executeQuery();  
   } 
pst.close();

相关推荐

    Pr_St_insert.rar_statement

    总结起来,Statement适合简单且不频繁的SQL操作,而PreparedStatement则更适合复杂的、需要多次执行或有动态参数的场景,同时提供更高的安全性和性能。在实际开发中,我们应根据具体需求选择合适的SQL执行方式。

    使用OracleJDBC的Java编程:性能.docx,原文+译文。

    Statement对象与PreparedStatement对象的对比 这两种对象在执行相同任务时的表现会有所不同。通过对比它们在插入操作中的性能,可以更清楚地了解哪种对象更适合特定的应用场景。 #### 五、结论 通过对上述内容的...

    三种JDBC批量插入编程方法的比较

    - **Statement**:适用于一次性执行的简单SQL语句,其性能通常略低于PreparedStatement,但如果SQL语句结构固定,且不涉及参数替换,Statement的性能可能会更好。 - **CallableStatement**:在处理存储过程时,...

    java面试精选72题

    2. JDBC的PreparedStatement与Statement的对比。PreparedStatement是Statement的扩展,相比于Statement,PreparedStatement在执行前先进行SQL语句的预编译,能够提高执行效率,尤其是在执行复杂或重复的SQL语句时。 ...

    mysql,jdbc详解,与ibatis对比。批量查询,分页处理。

    Statement与PreparedStatement的区别 - **Statement**: 可以执行静态SQL语句,但不支持参数化查询,每次执行都需要重新编译。 - **PreparedStatement**: 支持参数化查询,通过“?”作为占位符,预编译后可重复使用...

    jdbc经典实例

    本实例将深入探讨如何有效利用JDBC进行数据库操作,并重点关注`database.properties`配置文件来封装数据库连接,以及`Statement`与`PreparedStatement`的对比。 首先,我们来看`database.properties`文件。这个文件...

    JDBC编程技术_jdbc

    7. **JDBC与ORM框架的对比** - 虽然JDBC提供底层数据库访问,但编写和维护大量SQL代码可能繁琐且易出错。ORM框架如Hibernate、MyBatis等,通过对象映射简化了这一过程,提供了更高级别的抽象,但也带来了额外的性能...

    性能优化总结.doc

    比如,使用预编译的PreparedStatement替代普通的Statement,可以防止SQL注入并提高执行效率。 在监控和诊断方面,使用性能收集工具如操作系统的性能视图、Oracle的statspack和AWR,以及EM(Enterprise Manager)...

    三种数据库的jdbc连接方式小例子(附:数据库文件)

    同时,为了提高性能和安全性,推荐使用PreparedStatement代替Statement,因为它可以防止SQL注入攻击,并允许预编译SQL语句。 总结,JDBC为Java开发者提供了统一的接口来操作各种数据库。无论使用MySQL、SQLServer...

    java JDBC 外文翻译 外文文献 英文文献.doc

    而PreparedStatement预编译SQL语句,通常比Statement对象在多次执行相同查询时表现出更好的性能,因为它允许数据库提前解析和优化查询;CallableStatement则用于调用存储过程。 此外,文档还会比较使用Oracle Call ...

    Java典型应用彻查1000例-数据库应用基础

    4. **PreparedStatement与Statement**:对比分析两种执行SQL语句的方式,强调PreparedStatement的安全性,防止SQL注入攻击。 5. **结果集处理**:探讨ResultSet对象的使用,包括遍历结果集、处理多行数据和关闭资源...

    sql2005 批量更新问题的解决方法

    #### 二、使用 Statement 与 PreparedStatement 的对比 在进行批量更新操作时,有两种主要的方式可以选择:`Statement` 和 `PreparedStatement`。这两种方式各有优劣: 1. **使用 Statement** ```java ...

    chapter06JDBC.rar

    `Connection.prepareStatement()`创建PreparedStatement,支持参数化查询,提高性能,防止SQL注入。 3. CallableStatement: 对应存储过程的调用,通过`Connection.prepareCall()`创建。 四、结果集处理 1. ...

    Expert Oracle JDBC Programming - Apress

    - **Statement与PreparedStatement**:对比分析了Statement和PreparedStatement的使用,强调了PreparedStatement在防止SQL注入攻击和提高性能方面的优势。 - **结果集处理**:详述了如何使用ResultSet对象获取查询...

    jdbc资源总结jdbc

    ### JDBC与ORM框架的对比 虽然JDBC提供了底层数据库操作的灵活性,但在实际开发中,ORM框架(如Hibernate、MyBatis)简化了数据访问层的代码,提供了对象关系映射功能,提高了开发效率。 总的来说,JDBC作为Java与...

    JDBC & Transaction 总结整理

    - **DriverManager与DataSource性能对比**:DataSource通常比DriverManager更高效,因为它能重用连接并支持连接池。 - **PreparedStatement与Statement**:PreparedStatement预编译SQL语句,提高性能,防止SQL注入...

    MySQL.and.Java.Developers.Guide

    - **PreparedStatement与Statement**:对比两者,理解为什么PreparedStatement更安全、更高效。 - **ResultSet处理**:学习如何解析和操作查询结果集。 - **异常处理**:掌握SQLException等常见异常的捕获与处理。 ...

    《SQL预编译和批量提交对性能提升效果探索》测试代码

    在IT领域,尤其是在数据库管理与优化中,SQL预编译和批量提交是两个重要的概念,它们对于提升系统性能有着显著的影响。这篇测试代码的目的就是探讨并验证这两种技术如何提高SQL查询和数据处理的速度。 首先,让我们...

    JDBC专题(三)-JDBC完成用户注册功能

    ##### 3.1 PreparedStatement和Statement的对比(面试题) - **PreparedStatement**:提供了预编译的功能,可以提高执行效率和安全性,尤其适用于多次执行相同的SQL语句的情况。 - **Statement**:直接执行SQL语句...

    jdbc.rar_jdbc

    - `PreparedStatement`:预编译的SQL语句,性能优于Statement,可防止SQL注入攻击。 - `CallableStatement`:用于调用数据库存储过程。 - `ResultSet`:存储查询结果的对象,提供遍历查询结果的方法。 **2. JDBC...

Global site tag (gtag.js) - Google Analytics