某天,在群里看见有个人 问 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.PRintln("进来了");
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();
}
}
}
这只是一个思路~转储数据库的话其实和这个差不多;
新闻热点
疑难解答