package Statement批量处理; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import org.junit.After; import org.junit.Before; import org.junit.Test; public class StatementDemo { /** void clearBatch() 清空此 Statement 对象的当前 SQL 命令列表。 void addBatch(String sql) 将给定的 SQL 命令添加到此 Statement 对象的当前命令列表中。 int[] executeBatch() 将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。 int getMaxRows() 获取由此 Statement 对象生成的 ResultSet 对象可以包含的最大行数 void setMaxRows(int max) 将此 Statement 对象生成的所有 ResultSet 对象可以包含的最大行数限制设置为给定数。 */ @Test public void batch() throws Exception{ Statement st=con.createStatement(); for(int i=11;i<20;i++){ //String sql ="delete from stud where id="+i; String sql = "insert into stud values("+i+",'Jack')"; //每一次执行exeucteUpdate方法 ,st对象直接就将这个sql //通过connection发送给了数据库 //st.executeUpdate(sql); //仅仅是添加sql而不执行 //st.executeUpdate(sql); //也执行了???? st.addBatch(sql); } int[] eff=st.executeBatch(); System.err.println("执行完成"+eff.length); st.close(); } @Test public void batch2() throws Exception{ Statement st = con.createStatement(); for(int i=1;i<=5;i++){ String sql = "insert into stud values("+i+",'Jack')"; st.addBatch(sql); } //对于st这个对象的批量处理,可以处理不同的sql语句 String sql = "update stud set name='Rose'"; //再添加这个sql st.addBatch(sql); //在几行数组的大小即length是几 int[] effects = st.executeBatch();//{1,1,1,1,1,5}=10 //获取执行了多少个sql int sqlCount = effects.length; //获取一共影响多少行 int sum= 0; for(int i:effects){ sum+=i; } System.err.println("一共有SQL:"+sqlCount+",影响了表中行数:"+sum); st.close(); } @Before // 执行Test前执行 public void getCon() throws Exception { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://127.0.0.1:3306/abc?useUnicode=true&characterEncoding=utf8"; con = DriverManager.getConnection(url, "root", "1234"); // con.close(); // System.err.println(con); } @After // 执行Test后执行 public void closeConn() throws Exception { if (con != null || !con.isClosed()) { con.close(); } } private Connection con; }