多线程实现一分钟插入1000万条数据

  首先我们需要建立一个线程类,继承Thread类,并实现run方法

   1、获取数据库连接

   2、编写插入的sql语句

   3、关闭自动提交  conn.setAutoCommit(false);

   4、编写for循环,跟着那个的插入方法一样。 

   5、将注入的信息,一条条添加到pst中。pst.addBatch();//批量添加信息

   6、在for循环结束的地方,将信息批量执行。pst.executeBatch();

   7、提交事务 conn.commit();

public class InsertThread extends  Thread {
	public void run(){
		String url = "jdbc:postgresql://localhost:5432/teacher"; //数据库连接地址
        String name = "org.postgresql.Driver";
        String user = "postgres"; 
        String password = "*****";//密码
        Connection conn = null;
			try {	
			    Class.forName(name);
				conn=DriverManager.getConnection(url, user, password);
				conn.setAutoCommit(false);//关闭自动提交
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			 }catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			long begin=new Date().getTime();
			String sql= "INSERT INTO teachers (t_name,t_password,sex,description,pic_url,school_name,regist_date,remark) VALUES(?,?,?,?,?,?,?,?)";
			try {
				StringBuilder sqls= new StringBuilder(); 
				conn.setAutoCommit(false);
				PreparedStatement pst=conn.prepareStatement(sql);
                //编写事务
				for(int i=1;i<=10;i++){

					for(int j=1;j<=1000000;j++){
						pst.setString(1,"teacher122");
						pst.setString(2, "12223444");
						pst.setString(3, "男");
						pst.setString(4, "教师");
						pst.setString(5, "www.bbb.com");
						pst.setString(6, "java大学");
						pst.setString(7, "2016-08-16 14:43:26");
						pst.setString(8, "你好啊");
						pst.addBatch();//批量添加信息
					}
                    // 执行批量操作
                    pst.executeBatch();
                    // 提交事务
                    conn.commit();
				}
				pst.close();
                conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			 // 结束时间
            Long end = new Date().getTime();
            // 耗时
            System.out.println("100万条数据插入花费时间 : " + (end - begin) / 1000 + " s"+"  插入完成"); 
	}
}

8 编写测试类

public class InsertTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
         for (int i = 1; i <=10; i++) {
             new InsertThread().start();
           }
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_42324471/article/details/81675387