大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java學(xué)習(xí) Java使用多線程插入數(shù)據(jù)庫(kù)

Java使用多線程插入數(shù)據(jù)庫(kù)

更新時(shí)間:2022-11-21 09:41:52 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3120次

經(jīng)過(guò)測(cè)試,單核機(jī)器上效果不好,甚至不如單線程效率高。多核CPU效果提升較為明顯。

JdbcUtils.java

package com.inserttestdata;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.PreparedStatement;  
import java.sql.SQLException;  
import java.util.List;
import java.util.Vector;  
import java.util.ArrayList;
public class JdbcUtils {  
    static String driver = "com.mysql.jdbc.Driver";       
    static Vector<Connection> pools = new Vector<Connection>();  
    private static String url_unic = "?useUnicode=true&characterEncoding=utf8";    
    public static Connection getDBConnection(String url,String dataBase,String user,String pwd){  
        try {  
            //1.加載驅(qū)動(dòng)  
            Class.forName(driver);  
            //2.取得數(shù)據(jù)庫(kù)連接  
            String url_total = url+"/"+dataBase+url_unic;
            System.out.println(url_total);
            Connection conn =  DriverManager.getConnection(url_total, user, pwd);  
            return conn;  
        } catch (SQLException e) {  
            e.printStackTrace();  
        } catch (ClassNotFoundException e) {  
            e.printStackTrace();  
        }  
        return null;  
    }      
	//關(guān)閉數(shù)據(jù)庫(kù)連接	
    public static void closeCon(Connection con){
        if(con != null){
        	try{
            con.close();
        	    }catch(Exception e){
        	    	e.printStackTrace();
            	}
        }
    }          
    public static void insertIntoTable(String url,String user,String pwd,String table,List<String> list,Connection conn,PreparedStatement pstmt,int start,int end){  
        try {  
			String sql = "insert into " + table  + " (" + "inner_account_id,account_id,custom_id,custom_cname,account_type,is_internal,"
				      + "first_login_date,last_date,account_mode,is_special_line,account_status,custom_type_id,iwind_type,has_auxiliary"
				      + ")" + " values " + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
			pstmt = conn.prepareStatement(sql);
			for(String str:list.subList(start, end)){
			    String[] s = str.split("\t");			
				pstmt.setInt(1,Integer.parseInt(s[0]));
				pstmt.setString(2,s[1]);
				pstmt.setString(3,s[2]);
				pstmt.setString(4,s[3]);
				pstmt.setString(5,s[4]);
				pstmt.setString(6,s[5]);
				pstmt.setString(7,s[6]);
				pstmt.setString(8,s[7]);
				pstmt.setString(9,s[8]);
				pstmt.setString(10,s[9]);
				pstmt.setString(11,s[10]);
				pstmt.setString(12,s[11]);
				pstmt.setString(13,s[12]);
				pstmt.setString(14,s[13]);
				pstmt.addBatch();
			}
			pstmt.executeBatch();
			conn.commit();			 
			 System.out.println("insert data success!");
	     } catch(SQLException e){
	    	 e.printStackTrace();
	    	 System.out.println("insert data fail!");
	     }
    }
	//刪除表中數(shù)據(jù)
	public static void dropData(String dataBase,String url,String user,String pwd,String table){
		Connection conn = getDBConnection(url,dataBase,user,pwd);
		try{
			String sql = "delete from "+ table;
			//System.out.println(sql);
			PreparedStatement pstmt = conn.prepareStatement(sql);
			pstmt.executeUpdate();	
			System.out.println("delete data success!");		
		} catch(SQLException e){
			e.printStackTrace();
			System.out.println("delete data fail!");		
		}finally{
			closeCon(conn);	
		}
	}    
	//讀取文本文件
	public static void writeToDat(String dataBase,String path,String url,String user,String pwd,String table,int start,int end,int flag,int ch){
		File file = new File(path);
		List<String> list = new ArrayList<String>();
		Connection conn = null;	
		PreparedStatement pstmt = null;
		try { 
			InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf8"); 
			BufferedReader bw = new BufferedReader(isr);
			String line = null;
			conn = getDBConnection(url,dataBase,user,pwd);	
			conn.setAutoCommit(false);
			int count = 0;
			while((line = bw.readLine()) != null){
				//System.out.println(line);
				list.add(line);
				if(list.size() == 50000){
					insertIntoTable(url,user,pwd,table,list,conn,pstmt,start,end);
					list.clear();
					System.out.println("已成功插入: "+ (++count)*50000 + "條數(shù)據(jù)" );
				}
			}
			if(list.size() < 50000){ 
		        int total = list.size();  
		        int every = (int)total/10;
		        int[] s ={0,0,0,0,0,0,0,0,0,(total%10)};
				insertIntoTable(url,user,pwd,table,list,conn,pstmt,(flag)*every,((flag+1)*every+s[ch]));
				System.out.println(flag);
				System.out.println(s[ch]);
				//list.clear();			
				System.out.println("OK,已成功插入全部數(shù)據(jù)!");
			}
			bw.close();
		  }catch(FileNotFoundException e){
			  e.printStackTrace();
		  }catch(SQLException e){
			  e.printStackTrace();
		  }catch(IOException e){
			  e.printStackTrace();			  
		  } finally{
				if (pstmt != null){
					try{
						pstmt.close();
					}catch(SQLException e){
						e.printStackTrace();
					}
				}
				if(conn != null){
					closeCon(conn);
			}
	}
}
}

doInsert.java

package com.inserttestdata;
import java.util.concurrent.CountDownLatch;  
//import java.util.concurrent.ExecutorService;  
//import java.util.concurrent.Executors;   
public class doInsert {  
    public static void main(String[] args) {  
        long startTimes = System.currentTimeMillis();  
        int threadCount = 10;  
        int total = 50000;  
        int every = total/threadCount;  
        int flag = 0;
        int ch = 0;
        final CountDownLatch latch = new CountDownLatch(threadCount);  
        //傳入?yún)?shù)
		String url = args[0];          //傳入數(shù)據(jù)庫(kù)url
		String dataBase = args[1];     //傳入數(shù)據(jù)庫(kù)名
		String user = args[2];         //傳入用戶名
		String pwd = args[3];          //傳入用戶密碼
		String table = args[4];        //傳入表名
		String path = args[5];         //傳入本地文件地址
		String deleteFlag = args[6];   //是否在插入前刪除表中的數(shù)據(jù)(true or false)
		System.out.println("deleteFlag is: "+deleteFlag);
		if(deleteFlag.equals("true") | deleteFlag.equals("True")){
			JdbcUtils.dropData(dataBase,url,user,pwd,table);
		}
        for(int i=0;i<threadCount;i++){  
            Thread thread = new Thread(new Worker(dataBase,latch,i*every,(i+1)*every,flag++,ch++,path,user,pwd,table,url)); 
            thread.start();
        }  
        try {  
            latch.await();  
            long endTimes = System.currentTimeMillis();  
            System.out.println("所有線程執(zhí)行完畢,用時(shí)為 :" + (endTimes - startTimes)/1000 + "s");  
        } catch (InterruptedException e) {  
            e.printStackTrace();  
        }  
    }             
}  
class Worker implements Runnable{   	
    int start = 0;  
    int end = 0;  
    int flag;
    int ch;
    String dataBase;
    String path;
    String user;
    String pwd;
    String table;
    String url;    
    CountDownLatch latch;  
    public Worker(String dataBase,CountDownLatch latch, int start,int end,int flag,int ch,String path,String user,String pwd,String table,String url){  
        this.start = start;  
        this.end = end;   
        this.latch = latch; 
        this.flag = flag;
        this.ch = ch;
        this.dataBase = dataBase;
        this.path = path;
        this.user = user;
        this.pwd = pwd;
        this.table = table;
        this.url = url;
    }        
    @Override  
    public synchronized void  run() {   
        System.out.println("線程" + Thread.currentThread().getName()+ "正在執(zhí)行。。");   
        JdbcUtils.writeToDat(dataBase,path,url,user,pwd,table,start,end,flag,ch);  
        latch.countDown();  
    }        
}  

 

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-04-24 搶座中
  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 中文字幕日本不卡一二三区 | 99久久综合| 欧美一区二区三区高清视频 | 欧美一级成人毛片视频 | 精品国产高清自在线一区二区三区 | 久久综合九色综合97_ 久久久 | 亚洲国产成人九九综合 | 五月婷婷在线免费观看 | 天天综合天天综合色在线 | 天天艹日日干 | 成年女人a毛片免费视频 | 欧美va亚洲va国产综合 | 精品成人一区二区三区免费视频 | h片网站在线观看 | 久久久这里只有精品免费 | 欧美精品香蕉在线观看网 | 一级黄色a视频 | 四虎国产成人免费观看 | 久久精品国产99久久6动漫欧 | 深夜视频在线 | 天天射网| 国产精品免费一区二区三区四区 | japanese国产高清麻豆 | 免费观看一级特黄三大片视频 | 国产毛片久久久久久国产毛片 | 婷婷在线视频观看 | 久久久综合 | 全部免费特黄特色大片视频 | 青草社区 | 亚洲欧美日韩中文字幕在线一区 | 老司机午夜性大片 | 亚洲日本一区二区三区在线不卡 | 国产成人aa免费视频 | 亚洲欧美强伦一区二区另类 | 国产亚洲精 | 国产永久精品 | 亚洲精品自产拍在线观看 | 久久久久久毛片免费播放 | 深夜福利国产精品亚洲尤物 | 伊人色婷婷 | 国产免费三a在线 |