`

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 连接已关闭");
 }
}

 

分享到:
评论

相关推荐

    优化Hibernate性能的几点建议

    中取出的记录条数,一般设置为30、50、100.Oracle数据库的JDBC驱动默认的Fetch Size=15,...<prop key="hibernate.jdbc.batch_size">100</prop> --> <prop key="hibernate.jdbc.batch_size">50 </property>

    Hibernate查询语言

    if ( i % 20 == 0 ) { //20, same as the JDBC batch size //20,与JDBC批量设置相同 //flush a batch of inserts and release memory: //将本批插入的对象立即写入数据库并释放内存 session.flush(); session.clear...

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

    Hibernate hibernate.jdbc.batch_size 测试带有 MySQL JDBC 驱动程序的 Hibernate 批量插入示例。 에 관한 설명

    JDBC:MySQL8.0.29驱动

    MySQL JDBC驱动包8.0, mysql-connector-java-8.0.29。 供Java连接数据库使用。

    spring-framework-reference4.1.4

    Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................

    spring-framework-reference-4.1.2

    Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................

    MyEclipse注册机

    Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update 或者org.springframework.jdbc.BadSqlGrammarException: Hibernate operation: could not insert: ...

    SpringBatch批处理 刘相编

    以及Spring Batch框架中经典的三步走策略:数据读、数据处理和数据写,详尽地介绍了如何对CVS格式文件、JSON格式文件、XML文件、数据库和JMS消息队列中的数据进行读操作、处理和写操作,对于数据库的操作详细介绍了...

    Mybatis与JDBC批量插入MySQL数据库性能测试

    Mybatis与JDBC批量插入MySQL数据库性能测试,资源包含文档、代码和数据库。

    JDBC Java Database Connectivity

    基本目标:  了解JDBC (Java Database Connectivity)相关概念  JDBC的四种类型的驱动  JDBC核心接口与类  JDBC体系结构图和开发步骤 JDBC 事务 进阶目标: 并发控制(Concurrency Control) ... 批处理(Batch)

    spring batch 学习多种场景练习demo项目源码

    spring batch 学习多种场景练习demo项目源码,包括: 1.读取文件--处理--写入文件; 2.读取文件--处理--写入数据库 ; 3.读数据库--处理--写入数据库; 4.读数据库--处理--写入文件; 文件类型包括:CSV,TXT,JSON,XML; ...

    pro spring batch

    Concepts in Java which the reader should be comfortable with include file I/O, JDBC, and transactions. Given that Spring Batch is a framework built upon the open-source IoC container Spring, which ...

    SpringBatchExample:描述使用JdbcTemplate和NamedParameterJdbcTemplate的Spring批处理更新操作

    Spring JDBC Batch更新示例 Example application describes how to perform batch operation with spring JdbcTemplate class.#技术堆栈。 1. Spring核心jdbc模块。 2. H2嵌入式数据库。 3. Gradle构建脚本。 4....

    springbatch_嵌入式jetty_动态控制的quartz

    支持web接口的批处理框架 在eclipse中导出为可执行的jar,无需部署到任何web容器中。直接通过bat或shell启动即可。...mybatis3.4.1 druid1.0.17 smg3(决策引擎) jetty8.1.5 fastjson1.2.7 springjdbc3.2.14

    用JDBC访问ORACLE数据库 关于commit 增快效率 大数据 等的整理

    1、问:用JDBC访问ORACLE数据库,做DELETE操作,能用JAVA多线程实现吗? ORACLE服务器要怎么配?(以下答案来自网络,仅供参考)  答: Oracle有自己的锁机制。算你开100条线,它还是一条一条删除。不能同时删除多...

    Hibernate错误及解决办法集合

    本人做系统时遇到的一些Hibernate问题及解决方案。

    Spark与Mysql的交互

    背景  Spark在对目标数据进行...  Error writing spark dataframe to mysql table JDBC batch insert performance  还有些其他的贴  - Using Apache Spark and MySQL for Data Analysis  - spark 1.3.0 将d

    JDBC_MySQL&Oracle;源码

    JDBC连接MySQL;JDBC连接Oracle. 两部分源码,写的比较详细,包括对各种结果集进行的处理分类,包括PreparedStatement,CallableStatement,批处理Batch,运用事务处理,滚动结果集和更新结果集等

    详解jdbc实现对CLOB和BLOB数据类型的操作

    主要介绍了详解jdbc实现对CLOB和BLOB数据类型的操作的相关资料,这里实现写入操作与读写操作,需要的朋友可以参考下

    spring-batch-lightmin-samples:Spring Batch Lightmin示例应用程序

    客户样品地址迁移器address-migrator-boot-client-具有jdbc存储库的经典客户端示例address-migrator-remote-repository-具有远程存储库的经典客户端示例address-migrator-service-discovery-consul-领事发现客户端...

Global site tag (gtag.js) - Google Analytics