某天,在群里看見有個人 問 sqlService里面有2000萬條數據 需要轉儲到orcale中。什么方式比較好,后來一琢磨非多線程莫屬啊~;
我這里沒有那么多數據,所以我就模擬了下 一次存入10萬條數據,看有多快~;上代碼。
在數據庫創建 表 t_test 2個字段 id name
定義一個類 繼承Runnable 實現run方法
public class Test implements Runnable{
//實現run方法
public void run() {
//定義一個集合~這個集合是用來裝入存入失敗的數據
List<Integer> list = new ArrayList<Integer>();
//這里就是要設置存入的數據 200個
for (int i = 0; i < 200; i++) {
String sql="INSERT into t_test VALUES(null,"+i+")";
try {
//jdbc方式存入,這個是自己寫的工具類
JDBCUtils.executeSQL(sql);
} catch (Exception e) {
//當出現錯誤的時候 會把沒有存入的裝入集合里面
list.add(i);
}
}
//判斷集合是否為空,不為空證明有數據沒有存入,利用遞歸的方式在進行存入
if(!list.isEmpty()){
System.out. dg(list);
}
}
//需要進行遞歸的操作
public void dg(List<Integer> list){
ArrayList<Integer> list2 = new ArrayList<Integer>();
for (Integer i : list) {
String sql="INSERT into t_test VALUES(null,"+i+")";
try {
JDBCUtils.executeSQL(sql);
} catch (Exception e) {
list2.add(i);
}
}
if(!list2.isEmpty()){
System.out.println("進行遞歸");
dg(list2);
}else{
System.out.println("結束");
}
}
public static void main(String[] args) {
Thread thread = null;
//開啟500跳線程
for (int i = 0; i < 500; i++) {
//需要開啟線程的類
thread = new Thread(new Test());
//開啟現成
thread.start();
}
}
}
這只是一個思路~轉儲數據庫的話其實和這個差不多;
新聞熱點
疑難解答