我对PreparedStatement和Statement的性能测试了一下:
测试代码如下:
java 代码
- Connection con = getOraConnection();
- String sql = "select id,name from test where id=";
- String tempSql;
- int count = 1000;
- long time = System.currentTimeMillis();
- for (int i = 0; i < count; i++) {
- Statement st = con.createStatement();
- tempSql=sql+(int) (Math.random() * 100);
- st.executeQuery(tempSql);
- st.close();
- }
- System.out.println("st cost:" + (System.currentTimeMillis() - time));
-
- String psql = "select id,name from test where id=?";
- time = System.currentTimeMillis();
- for (int i = 0; i < count; i++) {
- int id=(int) (Math.random() * 100);
- PreparedStatement pst = con.prepareStatement(psql);
- pst.setBigDecimal(1, new BigDecimal(id));
- pst.executeQuery();
- pst.close();
- }
-
- System.out.println("pst cost:" + (System.currentTimeMillis() - time));
-
- 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高。
分享到:
相关推荐
总结起来,Statement适合简单且不频繁的SQL操作,而PreparedStatement则更适合复杂的、需要多次执行或有动态参数的场景,同时提供更高的安全性和性能。在实际开发中,我们应根据具体需求选择合适的SQL执行方式。
Statement对象与PreparedStatement对象的对比 这两种对象在执行相同任务时的表现会有所不同。通过对比它们在插入操作中的性能,可以更清楚地了解哪种对象更适合特定的应用场景。 #### 五、结论 通过对上述内容的...
- **Statement**:适用于一次性执行的简单SQL语句,其性能通常略低于PreparedStatement,但如果SQL语句结构固定,且不涉及参数替换,Statement的性能可能会更好。 - **CallableStatement**:在处理存储过程时,...
2. JDBC的PreparedStatement与Statement的对比。PreparedStatement是Statement的扩展,相比于Statement,PreparedStatement在执行前先进行SQL语句的预编译,能够提高执行效率,尤其是在执行复杂或重复的SQL语句时。 ...
Statement与PreparedStatement的区别 - **Statement**: 可以执行静态SQL语句,但不支持参数化查询,每次执行都需要重新编译。 - **PreparedStatement**: 支持参数化查询,通过“?”作为占位符,预编译后可重复使用...
本实例将深入探讨如何有效利用JDBC进行数据库操作,并重点关注`database.properties`配置文件来封装数据库连接,以及`Statement`与`PreparedStatement`的对比。 首先,我们来看`database.properties`文件。这个文件...
7. **JDBC与ORM框架的对比** - 虽然JDBC提供底层数据库访问,但编写和维护大量SQL代码可能繁琐且易出错。ORM框架如Hibernate、MyBatis等,通过对象映射简化了这一过程,提供了更高级别的抽象,但也带来了额外的性能...
比如,使用预编译的PreparedStatement替代普通的Statement,可以防止SQL注入并提高执行效率。 在监控和诊断方面,使用性能收集工具如操作系统的性能视图、Oracle的statspack和AWR,以及EM(Enterprise Manager)...
同时,为了提高性能和安全性,推荐使用PreparedStatement代替Statement,因为它可以防止SQL注入攻击,并允许预编译SQL语句。 总结,JDBC为Java开发者提供了统一的接口来操作各种数据库。无论使用MySQL、SQLServer...
而PreparedStatement预编译SQL语句,通常比Statement对象在多次执行相同查询时表现出更好的性能,因为它允许数据库提前解析和优化查询;CallableStatement则用于调用存储过程。 此外,文档还会比较使用Oracle Call ...
4. **PreparedStatement与Statement**:对比分析两种执行SQL语句的方式,强调PreparedStatement的安全性,防止SQL注入攻击。 5. **结果集处理**:探讨ResultSet对象的使用,包括遍历结果集、处理多行数据和关闭资源...
#### 二、使用 Statement 与 PreparedStatement 的对比 在进行批量更新操作时,有两种主要的方式可以选择:`Statement` 和 `PreparedStatement`。这两种方式各有优劣: 1. **使用 Statement** ```java ...
`Connection.prepareStatement()`创建PreparedStatement,支持参数化查询,提高性能,防止SQL注入。 3. CallableStatement: 对应存储过程的调用,通过`Connection.prepareCall()`创建。 四、结果集处理 1. ...
- **Statement与PreparedStatement**:对比分析了Statement和PreparedStatement的使用,强调了PreparedStatement在防止SQL注入攻击和提高性能方面的优势。 - **结果集处理**:详述了如何使用ResultSet对象获取查询...
### JDBC与ORM框架的对比 虽然JDBC提供了底层数据库操作的灵活性,但在实际开发中,ORM框架(如Hibernate、MyBatis)简化了数据访问层的代码,提供了对象关系映射功能,提高了开发效率。 总的来说,JDBC作为Java与...
- **DriverManager与DataSource性能对比**:DataSource通常比DriverManager更高效,因为它能重用连接并支持连接池。 - **PreparedStatement与Statement**:PreparedStatement预编译SQL语句,提高性能,防止SQL注入...
- **PreparedStatement与Statement**:对比两者,理解为什么PreparedStatement更安全、更高效。 - **ResultSet处理**:学习如何解析和操作查询结果集。 - **异常处理**:掌握SQLException等常见异常的捕获与处理。 ...
在IT领域,尤其是在数据库管理与优化中,SQL预编译和批量提交是两个重要的概念,它们对于提升系统性能有着显著的影响。这篇测试代码的目的就是探讨并验证这两种技术如何提高SQL查询和数据处理的速度。 首先,让我们...
##### 3.1 PreparedStatement和Statement的对比(面试题) - **PreparedStatement**:提供了预编译的功能,可以提高执行效率和安全性,尤其适用于多次执行相同的SQL语句的情况。 - **Statement**:直接执行SQL语句...
- `PreparedStatement`:预编译的SQL语句,性能优于Statement,可防止SQL注入攻击。 - `CallableStatement`:用于调用数据库存储过程。 - `ResultSet`:存储查询结果的对象,提供遍历查询结果的方法。 **2. JDBC...