`
HelloSure
  • 浏览: 310861 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

PreparedStatement的Batch功能

阅读更多
选择PreparedStatement还是Statement取决于你要怎么使用它们. 对于只执行一次的SQL语句选择Statement是最好的. 相反, 如果SQL语句被多次执行选用PreparedStatement是最好的.
PreparedStatement的第一次执行消耗是很高的. 它的性能体现在后面的重复执行.

Update大量的数据时, 先Prepare一个INSERT语句再多次的执行, 会导致很多次的网络连接. 要减少JDBC的调用次数改善性能, 你可以使用PreparedStatement的AddBatch()方法一次性发送多个查询给数据库. 例如, 让我们来比较一下下面的例子.

例 1: 多次执行Prepared Statement

PreparedStatement ps = conn.prepareStatement(
   "INSERT into employees values (?, ?, ?)");

for (n = 0; n < 100; n++) {

  ps.setString(name[n]);
  ps.setLong(id[n]);
  ps.setInt(salary[n]);
  ps.executeUpdate();
}

例 2: 使用Batch

PreparedStatement ps = conn.prepareStatement(
   "INSERT into employees values (?, ?, ?)");

for (n = 0; n < 100; n++) {

  ps.setString(name[n]);
  ps.setLong(id[n]);
  ps.setInt(salary[n]);
  ps.addBatch();
}
ps.executeBatch();


在例 1中, PreparedStatement被用来多次执行INSERT语句. 在这里, 执行了100次INSERT操作, 共有101次网络往返. 其中,1次往返是预储statement, 另外100次往返执行每个迭代.
在例2中, 当在100次INSERT操作中使用addBatch()方法时, 只有两次网络往返. 1次往返是预储statement, 另一次是执行batch命令. 虽然Batch命令会用到更多的数据库的CPU周期, 但是通过减少网络往返,性能得到提高.
记住, JDBC的性能最大的增进是减少JDBC驱动与数据库之间的网络通讯.
分享到:
评论

相关推荐

    Spring JdbcTemplate.batchUpdate 例子

    `JdbcTemplate`的`batchUpdate`方法就是用来实现这样的功能,它可以批量执行更新语句,如INSERT、UPDATE或DELETE。 `batchUpdate`方法的基本使用如下: ```java int[] result = jdbcTemplate.batchUpdate( ...

    【IT十八掌徐培成】Java基础第23天-02.sql注入-preparedstatement-批量插入.zip

    同时,熟练运用PreparedStatement的批量插入功能,可以有效地提高数据库操作的效率,尤其在处理大数据量场景时显得尤为重要。在实际项目中,结合最佳实践,如合理设置批处理大小,能够进一步优化系统性能。

    mongdb和oracledb已经access数据的batchInsert操作

    在"testproject"这个压缩包中,很可能包含了实现以上功能的Java代码示例。通过分析和运行这些代码,你可以更深入地理解如何在实际项目中应用这些技术。在实践中,确保了解并遵循最佳实践,如事务管理、错误处理和...

    【IT十八掌徐培成】Java基础第23天-02.sql注入-preparedstatement-批量插入 - 副本.zip

    i &lt; batchSize; i++) { pstmt.setString(1, value1); pstmt.setString(2, value2); pstmt.addBatch(); } // 执行批量操作 int[] updateCounts = pstmt.executeBatch(); ``` 在上述代码中,addBatch()方法将一...

    mp-batch-insert.zip

    3. **预编译SQL和参数绑定**:MybatisPlus可能使用PreparedStatement来预编译SQL,这样可以在第一次执行SQL时编译SQL模板,后续只需要绑定参数,减少了SQL解析的时间。 4. **数据库事务控制**:在批量插入过程中,...

    spring-batch-databasewriter

    1. **JdbcBatchItemWriter**:这是Spring Batch提供的默认数据库写入器,它使用PreparedStatement进行批量操作,可以显著提升性能。开发者需要提供SQL语句和参数映射,JdbcBatchItemWriter会自动处理参数绑定和事务...

    mybatis执行批量更新batch update 的方法(oracle,mysql两种)

    - 注意SQL注入的风险,尽可能使用预编译的`PreparedStatement`或MyBatis的动态SQL来防止SQL注入。 - 考虑到事务的边界,批量更新可能涉及的回滚和补偿操作。 - 谨慎处理批量更新的大小,过大的批量可能会导致内存...

    SpringBatch:示例 Spring Batch 应用程序将从 CSV 读取数据并将其存储在数据库中

    public void setValues(User user, PreparedStatement ps) throws SQLException { ps.setString(1, user.getName()); ps.setString(2, user.getEmail()); } } @Bean public JdbcBatchItemWriter&lt;User&gt; ...

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

    在`JDBCBatchInsert.java`中,可以看到如何创建PreparedStatement对象,设置占位符,然后多次调用`addBatch()`添加不同的数据,最后调用`executeBatch()`执行批量插入。 2. **使用Statement的batchUpdate()** ...

    JdbcTemplate的批量方法使用

    4. 最后,通过`JdbcTemplate`的`batchUpdate`方法执行批量插入操作。它接受SQL语句和`BatchPreparedStatementSetter`作为参数,返回一个整数数组,表示每条SQL语句的受影响行数。 批量删除操作与批量插入类似,但在...

    jdbc示例代码

    本篇将围绕“jdbc示例代码”这一主题,深入探讨相关的知识点,包括batch处理、滚动游标、事务管理和DML操作,以及PreparedStatement的使用。 1. **Batch处理**: 在批量处理中,我们可以通过JDBC API一次性提交多...

    jdbc优化连接数据库

    2. **预编译SQL语句(PreparedStatement)**: - 预编译的SQL语句能提高执行效率,因为它减少了解析和编译的次数。使用`?`占位符并多次执行同一查询,可以避免SQL注入问题。 3. **批处理(Batch Updates)**: - ...

    JDBC连接实现简单学生管理系统(附数据库).zip

    - 使用批处理(batch processing)可以提高大量插入或更新操作的效率。 - 考虑使用连接池(如C3P0、HikariCP)管理数据库连接,以减少连接创建和销毁的开销。 通过这个简单的学生管理系统,开发者可以学习到如何...

    jdbc2000,jdbc2005

    4. **Statement的批量参数化(PreparedStatement Batch with Parameters)**:批量处理带有参数的SQL语句,提高了批量操作的效率。 5. **并发控制(Concurrency Control)**:提供了读未提交(READ UNCOMMITTED)、...

    MyFourm JDBC源码(留言和邮件收发)

    - 使用批处理(Batch Processing)进行大量数据插入,提升性能。 - 数据库连接池(如C3P0、HikariCP)管理数据库连接,减少资源消耗。 - 使用索引优化查询速度,提高论坛的响应效率。 7. **异常处理** - 对JDBC...

    Spring JdbcDaoSupport 批量插入数据

    在`JdbcDaoSupport`中,我们可以通过`JdbcTemplate`的`batchUpdate(String sql, BatchPreparedStatementSetter setter)`方法来实现这个功能。`BatchPreparedStatementSetter`是一个接口,我们需要实现它的`setValues...

    java数据库连接方法

    对于批量执行相同结构的SQL语句,JDBC提供Batch Updates功能,可以提高执行效率。 10.异常处理: 在使用JDBC时,我们需要捕获SQLException及其子类异常,以确保程序的健壮性。 11.连接池: 为了提高性能和资源...

    BAtch125ProjectTask:项目任务

    7. **JDBC**:理解数据库连接,学会使用Statement、PreparedStatement执行SQL语句,处理结果集,了解事务管理。 8. **设计模式**:学习并应用单例、工厂、观察者、装饰器、代理等常见的设计模式,提高代码的可维护...

    jdbc.rar_jdbc_jdbc系统

    这个系统利用JDBC技术来与数据库进行交互,完成诸如用户管理、计费、资源分配等核心功能。下面将详细阐述JDBC的基本概念、其在该系统中的应用以及相关知识点。 JDBC(Java Database Connectivity)是Java平台的标准...

    由BatchSqlUpdate引发的思考-V1.4.doc

    为了探究性能下降的原因,笔者使用了两种方法:一种是使用 MySQL 的慢日志功能,另一种是使用 Wireshark 截取 MySQL 数据包。通过分析慢日志文件和数据包,笔者发现使用 BatchSqlUpdate 批量操作时是一条一条语句的...

Global site tag (gtag.js) - Google Analytics