`

JDBC Batch

    博客分类:
  • Java
 
阅读更多
有的时候,我们需要一次性插入很多的数据或者一次性更新、删除很多的数据,那么为了提高效率,
我们不妨使用JDBC的批处理来完成。以下就JDBC的批处理的例子展开讨论。所有应该注意的地方均
有注释。不过需要注意的是我们不能使用批处理来执行查询,即批处理语句中不可以出现select语句。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

/*
 9:05:15 AM2011
 */
public class BatchExecute {

 private static Connection conn = null;
 private static PreparedStatement ps = null;
 private static Statement st=null;

 public static void main(String[] args) {
  //noStaticBatch();//非静态批
  //staticBatch();//静态批
  blendBatch();//混合模式
 }
 public static void blendBatch(){
  try{
   long start = System.currentTimeMillis();
   
   conn.setAutoCommit(false);
   st=conn.createStatement();
   st.addBatch("insert into person(name,age) values('zhuqi',22)");//插入
   st.addBatch("insert into person(name,age) values('zhaoba',21)");
   st.addBatch("update person set name = 'qita',age='100' where name = 'zhangsan'");//更新
   st.addBatch("delete from person where name like 'name%'");//删除
   st.executeBatch();
   conn.commit();
   
   System.out.print("总共用时:" + (System.currentTimeMillis() - start)
     / 1000);
  }catch(Exception e){
   
  }finally{
   closeDB();
  }
 }
 public static void staticBatch(){
  try{
   long start = System.currentTimeMillis();
   
   conn.setAutoCommit(false);
   /**以下是错误的用法,此用法中两条sql语句均为执行,
    * 如果想应用此方式的批处理,请参照blendBatch方法**/
   /*ps=conn.prepareStatement("insert into person(name,age) values('lisi',22)");
   ps=conn.prepareStatement("insert into person(name,age) values('wangwu',20)");
   ps.addBatch();*/
   
   /**以下是正确的用法**/
   String sql="insert into person(name,age) values(?,?)";
   ps=conn.prepareStatement(sql);
   ps.setString(1, "lisi");
   ps.setInt(2, 22);
   ps.addBatch();
   ps.setString(1, "wangwu");
   ps.setInt(2, 20);
   ps.addBatch();
   
   ps.addBatch("update person set name = 'zhangsan',age = 23 where name = 'lisi'");//增加静态批
   ps.executeBatch();
   conn.commit();
   
   System.out.print("总共用时:" + (System.currentTimeMillis() - start)
     / 1000);
  }catch(Exception e){
   
  }finally{
   closeDB();
  }
 }
 public static void noStaticBatch(){
  try {
   long start = System.currentTimeMillis();
   
   conn.setAutoCommit(false);// 取消自动事务提交
   String sql1 = "insert into person(name,age) values(?,?)";
   ps = conn.prepareStatement(sql1);
   for (int i = 1; i <= 110; i++) {
    ps.setString(1, "names " + i);
    ps.setInt(2, i);
    ps.addBatch();
    if (i % 20 == 0 || i == 110) {// 每20条数据执行一次、到最后必须执行一次
     ps.executeBatch();//执行批
     
     try{//这里一定要捕捉异常
      conn.commit();// 提交事务
     }catch(SQLException exc){
      conn.rollback();// 在批处理命令中,如果有一个命令出现了错误,则回滚
     }
    }
   }
   
   System.out.print("总共用时:" + (System.currentTimeMillis() - start)
     / 1000);// 测试用时
  } catch (Exception e) {
   
  }finally{//关闭数据库连接
   closeDB();
  }
 }
 static{
  try {
   Class.forName("com.mysql.jdbc.Driver");
   conn=DriverManager.getConnection("jdbc:mysql:///test","root","root");
  } catch (Exception e) {
   System.out.println("数据库连接错误");
  }
 }
 public static void closeDB(){
  if(st!=null)
   try {st.close();} catch (SQLException e1){st=null;}
  if(ps!=null)
   try {ps.close();} catch (SQLException e1){ps=null;}
  if(conn!=null)
   try {conn.close();}catch (SQLException e){conn=null;}
  System.out.println("\t 连接已关闭");
 }
}

 

分享到:
评论

相关推荐

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

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

    hibernate-batch-size-test:Hibernate hibernate.jdbc.batch_size 测试

    `hibernate.jdbc.batch_size`是Hibernate配置中的一个重要参数,用于控制批处理操作的大小。本文将深入探讨这个参数的意义、作用以及如何在实际应用中进行测试。 批量插入是提高数据库性能的有效手段,特别是在大量...

    ewrwerw

    根据提供的部分内容,我们可以提炼出与Hibernate框架相关的两个关键配置参数:`hibernate.jdbc.fetch_size` 和 `hiberate.jdbc.batch_size`。这两个参数对于优化基于Hibernate的数据库操作性能至关重要。 ### 1. ...

    java 大数据导入工具类

    假设我们有一个`JDBCBatch.java`文件,我们可以创建一个`batchInsert()`方法,如下所示: ```java public class JDBCBatch { public void batchInsert(List&lt;MyData&gt; dataList) throws SQLException { try ...

    jdbc jdbc jdbc

    6. **批处理(Batch Processing)**:对于需要执行大量相似SQL语句的情况,JDBC提供批处理功能,允许一次发送多个SQL语句,从而提高效率。 7. **JDBC URL**:每个数据库驱动都有一个特定的JDBC URL格式,用于标识要...

    优化Hibernate性能的几点建议

    此外,还可以通过分析Hibernate的性能指标来调整诸如`hibernate.jdbc.batch_size`等参数,以达到最佳性能平衡。 总之,通过上述几个方面的优化措施,可以显著提高基于Hibernate构建的应用程序的性能。在实际应用中...

    jdbc2000,jdbc2005

    Java Database Connectivity(JDBC)是Java编程语言中用于与各种数据库进行交互的一组接口和类。JDBC2000和JDBC2005分别指的是在2000年和2005年时期的JDBC规范版本。这两个版本都是在Java数据库连接技术的发展历程中...

    51CTO下载-java-操作Oracle-批量入库的问题.pdf

    具体而言,他描述了在不同的方法下,如使用Oracle的自定义类型定义表类型、基本类型定义表类型以及JDBC批处理(JDBCBATCH)进行10000条数据的插入,并对比了它们的效率。为了分析这个问题,我们首先需要了解相关技术...

    Dm7JdbcDriver16.jar Dm7JdbcDriver17.jar Dm7JdbcDriver18.jar

    批处理(Batch Updates)则可以一次发送多个SQL语句,减少网络通信开销。 7. **查询结果集处理**: 结果集(ResultSet)对象是执行SQL查询后返回的结果,可以通过迭代遍历,获取每一行数据。同时,达梦JDBC驱动也...

    JDBCJDBC高级应用

    4. **批处理更新(Batch Update)**: - 批处理可以提高数据库操作的性能,避免频繁的网络通信。通过 `Statement` 对象的 `addBatch(String sql)` 方法添加SQL语句到批处理队列,然后通过 `executeBatch()` 执行...

    51CTO下载-java-操作Oracle-批量入库的问题.docx

    3. **JDBC批处理(JDBCBATCH)**: JDBC提供了一种批处理机制,允许将多个SQL语句组合在一起执行,从而减少与数据库的交互次数,提高性能。在Java中,可以通过调用Statement对象的`addBatch()`方法添加SQL语句到...

    Hibernate中大量数据的更新

    在 Hibernate 配置文件中,可以设置 `hibernate.jdbc.batch_size` 参数来指定批量抓取的大小。 如何实现批量更新 在 Controller 层,需要将大量数据插入到数据库时,可以使用以下方法: ```java for (int i = 0; ...

    遇到的问题1

    8. **JDBC批量更新失败**: "Could not execute JDBC batch update"可能是因为试图删除与外键关联的数据,检查数据库约束并处理好关联关系。 9. **懒加载问题**: "Stream close"提示没有启用懒加载,需要在Hibernate...

    JDBC:MySQL8.0.29驱动

    JDBC(Java Database Connectivity)是Java编程语言中用于与关系数据库交互的一种标准接口。它是Java平台的标准部分,允许开发人员使用SQL语言在Java应用程序中执行数据库操作。MySQL JDBC驱动,也称为MySQL ...

    制作调试过程及数据记录1

    另一个常见的问题是在级联操作时,如级联删除,可能会遇到`Hibernate: Could not execute JDBC batch update`的错误。这通常是由于Hibernate在执行数据库更新操作时出现了问题。为了解决这个问题,我们需要在实体类...

    SSH整合常见错误总结

    **问题描述**:执行Hibernate操作时,如插入数据,遇到`org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update`异常。 **原因分析**:这通常是由于数据库表不存在或表结构不匹配引起...

    SqlJDBC3.0和4.0

    2. **批处理更新(Batch Updates)**:允许一次提交多个SQL语句,提高了性能,减少了网络通信。 3. **结果集分页(Scrollable Result Sets)**:提供了向前和向后滚动的能力,以及定位到特定行的功能。 4. **...

    impala_jdbc驱动包

    - **批量操作**:通过BatchUpdate接口实现多条SQL语句的批量执行。 总的来说,Impala的JDBC驱动包为Java开发者提供了与Impala数据库交互的桥梁,无论是在大数据分析工具、BI应用还是自定义数据处理系统中,都能发挥...

    JDBC数据库

    1. **批处理(Batch Processing)**:多个SQL语句可以一起提交,提高性能。 2. **使用连接池(Connection Pool)**:避免频繁创建和关闭连接,减少系统开销。 3. **设置合适的缓冲大小**:调整`ResultSet`的fetch ...

Global site tag (gtag.js) - Google Analytics