sql语句批量处理Batch

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;
}
posted @ 2014-04-23 21:28  夏微风  阅读(1361)  评论(0编辑  收藏  举报