java多线程向数据库写入数据 -完整版

public class Member {
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    private String id;
    private String classid;

    public String getClassid() {
        return classid;
    }

    public void setClassid(String classid) {
        this.classid = classid;
    }
}

public class TestThread01 {
    private static int time=0;
    private static int residue=0;
    public static void division(){

         Connection cons=null;
         PreparedStatement pss=null;
         ResultSet rss = null;
        //获取要导入的总的数据条数
        String sql3="SELECT  count(*)  FROM class";
        try {
            Class.forName("com.mysql.jdbc.Driver");
            cons = DriverManager.getConnection("jdbc:mysql://192.168.1.85:3306/baseSys", "root", "12");
            pss=cons.prepareStatement(sql3);
            rss=pss.executeQuery();
            int sum=0;
            while(rss.next()){
                System.out.println("总记录条数:"+rss.getInt(1));
                sum=rss.getInt(1);
            }
            //每30000条记录作为一个分割点
            if(sum>=2){
                time=sum/2;
                residue=sum%2;
            }else{
                residue=sum;
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
    public static void main(String[] args){
        TestThread01 test=new TestThread01();
        test.division();
        int time=0;
        if (test.residue==0){
              time=test.time;
        }
        else
        {time=test.time+1;}
        for(int i=0;i;i++){
              MyThread myThread=new MyThread(i*2,2);
                new Thread(myThread,"新线程"+i).start();
        }
    }
}

public class MyThread implements Runnable{
    private int startNum;
    private int pageSize;
    private Connection cons=null;
    private Statement stas=null;
    private  Connection con=null;
    private Statement sta=null;
    private boolean flag=false;
    public MyThread() {

    }
    public MyThread(int startNum,int pageSize) {
        this.startNum=startNum;
        this.pageSize=pageSize;
        System.out.println("处理掉余数");
        try {
             cons=null;
            stas=null;
            System.out.println("--------"+Thread.currentThread().getName()+"------------");
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("加载mysql驱动...");
            cons = DriverManager.getConnection("jdbc:mysql://192.168.1.85:3306/baseSys", "root", "12");
            stas = cons.createStatement();
            System.out.println("连接mysql数据库成功!!");

            System.out.println("加载mysql驱动.....");
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://192.168.1.85:3306/baseSys", "root", "12");
            sta = con.createStatement();
            // 关闭事务自动提交
            con.setAutoCommit(false);
            System.out.println("连接mysql数据库成功!!");

        } catch (Exception e) {
            e.printStackTrace();
        }
        // TODO Auto-generated constructor stub
    }
    public ArrayList getAll(int startNum,int pageSize) throws ClassNotFoundException {
        Member member;
        ResultSet rss = null;
        ArrayList allmembers=null;
        String sql1="select * from class t order by id limit "+startNum+","+pageSize+";";
        try {
            allmembers=new ArrayList();
            System.out.println("正在获取数据...");
            rss=stas.executeQuery(sql1);
            while(rss.next()){
                member=new Member();
                member.setId(rss.getString("id"));
                member.setClassid(rss.getString("classid"));
                allmembers.add(member);
                //  System.out.println(member.getNames());
            }
            System.out.println("成功获取sqlserver数据库数据!");
            return allmembers;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            System.out.println("获取sqlserver数据库数据发送异常!");
            e.printStackTrace();
        }
        try {
            rss.close();
            stas.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }

    public void inputAll(ArrayList allmembers){
        System.out.println("开始向mysql中写入");
        String sql2="insert into class_bk values (?,?)";
        try {
            PreparedStatement ps = null;
            ps=con.prepareStatement(sql2);
            System.out.println("-------------------------等待写入数据条数: "+allmembers.size());
            for(int i=0;i;i++){
                ps.setInt(1, Integer.parseInt(allmembers.get(i).getId()));
                ps.setInt(2, Integer.parseInt(allmembers.get(i).getClassid()));
                ps.executeUpdate();
            }
            con.commit();
            ps.close();
            con.close();
            this.flag=false;
            System.out.println(Thread.currentThread().getName()+"--->OK");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            System.out.println("向mysql中更新数据时发生异常!");
            e.printStackTrace();
        }
    }
    public void run() {
        ArrayList allmembers=null;
        try {
            allmembers = getAll(startNum,pageSize);
            System.out.print(Thread.currentThread().getName()+"  StartNum:"+startNum+"  pageSize:"+pageSize);
            inputAll(allmembers);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

你可能感兴趣的:(java多线程向数据库写入数据 -完整版)