1. package book.database;  
  2.  
  3. import java.sql.Connection;  
  4. import java.sql.DatabaseMetaData;  
  5. import java.sql.SQLException;  
  6. import java.sql.Statement;  
  7.  
  8. /**  
  9.  * 执行一批SQL语句(批处理)  
  10.  */  
  11. public class Batch {  
  12.       
  13.     /**  
  14.      * 判断数据库是否支持批处理  
  15.      * @param con  
  16.      * @return  
  17.      */  
  18.     public static boolean supportBatch(Connection con){  
  19.         try {  
  20.             // 得到数据库的元数据  
  21.             DatabaseMetaData md = con.getMetaData();  
  22.             return md.supportsBatchUpdates();  
  23.         } catch (SQLException e) {  
  24.             e.printStackTrace();  
  25.         }  
  26.         return false;  
  27.     }  
  28.     /**  
  29.      * 执行一批SQL语句  
  30.      * @param con   数据库的连接  
  31.      * @param sqls  待执行的SQL数组  
  32.      * @return  
  33.      */  
  34.     public static int[] goBatch(Connection con, String[] sqls){  
  35.         if (sqls == null){  
  36.             return null;  
  37.         }  
  38.         Statement sm = null;  
  39.         try {  
  40.             sm = con.createStatement();  
  41.             // 将所有的SQL语句添加到Statement中  
  42.             for (int i=0; i<sqls.length; i++){  
  43.                 sm.addBatch(sqls[i]);  
  44.             }  
  45.             // 一次执行多条SQL语句  
  46.             return sm.executeBatch();  
  47.  
  48.         } catch (SQLException e) {  
  49.             e.printStackTrace();  
  50.         } finally {  
  51.             OperateDB.closeStatement(sm);  
  52.         }  
  53.         return null;  
  54.     }  
  55.  
  56.     public static void main(String[] args) throws ClassNotFoundException,  
  57.             SQLException {  
  58.         String dbName = "studentdb";  
  59.         String tableName = "student_basic";  
  60.         String userName = "test";  
  61.         String password = "test";  
  62.         String[] sqls = new String[3];  
  63.         sqls[0] = "UPDATE student_basic SET score=95 where name='john'";  
  64.         sqls[1] = "INSERT INTO student_basic (name, age, score) VALUES ('lisi', 17, 78)";  
  65.         sqls[2] = "DELETE FROM student_basic where name='zhangsan'";  
  66.           
  67.         Connection con = null;  
  68.         try {  
  69.             // 获得数据库连接  
  70.             con = DBConnector.getMySQLConnection(null, null, null, dbName,  
  71.                     userName, password);  
  72.             // 判断是否支持批处理  
  73.             boolean supportBatch = Batch.supportBatch(con);  
  74.             System.out.println("支持Batch? " + supportBatch);  
  75.             if (supportBatch){  
  76.                 // 执行一批SQL语句  
  77.                 int[] results = Batch.goBatch(con, sqls);  
  78.                 // 分析执行的结果  
  79.                 for (int i=0; i<sqls.length; i++){  
  80.                     if (results[i] >= 0){  
  81.                         System.out.println("语句: " + sqls[i] + " 执行成功,影响了"  
  82.                                 + results[i] + "行数据");  
  83.                     } else if (results[i] == Statement.SUCCESS_NO_INFO){  
  84.                         System.out.println("语句: " + sqls[i] + " 执行成功,影响的行数未知");  
  85.                     } else if (results[i] == Statement.EXECUTE_FAILED){  
  86.                         System.out.println("语句: " + sqls[i] + " 执行失败");  
  87.                     }  
  88.                 }  
  89.             }  
  90.         } catch (ClassNotFoundException e1) {  
  91.             throw e1;  
  92.         } catch (SQLException e2) {  
  93.             throw e2;  
  94.         } finally {  
  95.             // 关闭数据库连接  
  96.             OperateDB.closeConnection(con);  
  97.         }  
  98.     }