(mysql)批处理

(1)
executeBatch方法接着执行SQL语句,返回一个int型数组。这个数组包括每条语句影响到的行数。
注意:
使用mysql批处理,不可以操作select查询语句.
如果在一个批处理中使用是一个SELECT或者其它只返回结果的语句,那么将会产生一个SQLException异常。
 
(2)
实例一(不带参数的批处理)
首先,要关闭数据库连接的自动提交。否则就不叫批处理了,哈哈。
connect.setAutoCommit(false);
然后,判断该数据库是否支持批更新。
DatabaseMetaData dbmData = connect.getMetaData();
//...
if (dbmData.supportsBatchUpdates())
{
  //使用Statement创建批处理
  statement.addBatch("你的SQL语句");
  //根据需要添加多条批处理
  statement.addBatch("你的SQL语句");
  //获得批处理的结果
  int[] uCounts = statement.executeBatch();
  //等全部添加好了之后,可以一次性递交了。
  connect.commit();
如下具体实例:
 public int[] jBatch(Vector sqlv)
 {
  int[] results=null;
  
  try {
   Statement stmt=con.createStatement();
   DatabaseMetaData md=con.getMetaData();
   if(md.supportsBatchUpdates())
   {
    this.setAutoCommit(false);
    for(int a=0;a<sqlv.size();a++)
    {
     stmt.addBatch(sqlv.get(a).toString());
    }
    results=stmt.executeBatch();
    this.commit();
   }
   
  } catch (SQLException e) {
   e.printStackTrace();
  }
  return results;
 }
调用时:
   Vector sqlv=new Vector();
   sqlv.add("delete from user");
   sqlv.add("insert into user values(3,'hello','testing')");
   sqlv.add("insert into user values(4,'hi','TESTING')");
   sqlv.add("update user set name='hihi' where id=4");
   int[] results=dbOperator.jBatch(sqlv);
           System.out.println("------->batch results:返回batch每条记录影响的行数");
   System.out.println("------->batch results:"+results);
   System.out.println("------->batch results[0]:"+results[0]);
   System.out.println("------->batch results[1]:"+results[1]);
   System.out.println("------->batch results[2]:"+results[2]);
   System.out.println("------->batch results[3]:"+results[3]);
 
实例二(带参数的批处理)
其它同上,不同如下:
  PreparedStatement psStatement = connect.prepareStatement("你的SQL语句(?)");
  psStatement.setString(1,"Jennie");
  psStatement.addBatch();
  //根据需要添加多条批处理语句
  psStatement.setString(1,"Tom");
  psStatement.addBatch();
  int[] uCounts = psStatement.executeBatch();
  connect.commit();
 
(3)
上面两实例中的不同方式比较:
不同:
第一种:添加各SQL,是放于stmt.addBatch(sql); -->可以多个不同的语句
第二种:如上,-------->只有一个SQL语句,但有不同的条件.
相同:
都须先设置setAutoCommit(false);
添加后,都须执行批处理**.executeBatch();
都会返回一个int[]的结果集,显示各语句影响的行数;
最后都须commit(); 

本文出自 “Changes we need ! ” 博客,转载请与作者联系!

你可能感兴趣的:(mysql,数据库,职场,休闲)