视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
java处理较大数据量到mysql
2020-11-09 07:23:37 责编:小采
文档


1、 jdbd采用批处理插入大量数据,速度还是相当的慢,一个拥有一个自增字段、三个字符串字段的表,往里面插入1W条数据消耗一分多钟。代码如下: public class DBbatchdeal {/** * * @param conn jdbc链接 * @param tableName 表明 * @param lists 数据集 * @



1、 jdbd采用批处理插入大量数据,速度还是相当的慢,一个拥有一个自增字段、三个字符串字段的表,往里面插入1W条数据消耗一分多钟。代码如下:

public class DBbatchdeal {
	
	/**
	 * 
	 * @param conn jdbc链接
	 * @param tableName 表明
	 * @param lists 数据集
	 * @param n 每行字段个数 出去自增字段
	 * @param flag 第一列是否自增字段
	 * @return 是否成功
	 */
	public boolean deal(Connection conn,String tableName,ArrayList lists ,int n,boolean flag){
	StringBuffer sql = new StringBuffer();
 sql.append("insert into ").append(tableName)
 .append(" values(");
 sql=(flag==true?sql.append("null ,"):sql);
 for(int i=0;i lists =new ArrayList();
	 for(int i=0;i<10000;i++){
	 	 String[] str={"1307"+i,"passwd"+i,"20130709121212"};
	 	 lists.add(str);
	 }
	 deal.deal(conn, "testTable", lists, 3, true);
	}
	
}


2、因为上面的方法处理的较慢,又想了个较为麻烦点儿的方式,用mysql的load data来导入数据。具体就是写段导入数据的脚本用java来执行,测试了下1w条记录插入的时间还是相当短的。

结果如下:

Java2Sh内容如下:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class Java2Sh {
	
	
	/**
	 * 对文件进行赋权
	 * @param infile 文件全路径
	 * @return runtime执行返回码 
	 */
	 public int chmodrun(String infile) { 
	 int retCode = 0;
	 try {
	 Runtime rtime = Runtime.getRuntime();
	 Process child = rtime.exec("chmod 777 " +infile);
	 retCode=child.waitFor();
	 System.out.println("chmod :"+retCode);
	 }
	 catch (Exception e) {
	 System.out.println("chmod failed "+infile);
	 e.printStackTrace();
	 }
	 return retCode;
	 }
	 
	 
	 /**
	 *执行脚本文件
	 * @param infile 文件全路径
	 * @return runtime执行返回码 
	 */
	 public int shellFile(String infile) { 
	 int retCode = 0;
	 try {
	 Runtime rtime = Runtime.getRuntime();
	 Process child = rtime.exec("sh " +infile);
	 retCode=child.waitFor();
	 System.out.println("shell file :"+retCode);
	 }
	 catch (Exception e) {
	 System.out.println("shell file failed "+infile);
	 e.printStackTrace();
	 }
	 return retCode;
	 }
	 
	 public void writeData() throws IOException{//生成mysql2.txt
	 String str="13311122,passwds,20130710235959";
	 BufferedWriter out =new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("D:\\mysql2.txt"))));
	 for(int i=0;i<10000;i++){
	 out.write(str);
	 out.write("\n");
	 }
	 out.flush();
	 out.close();
	 }
	 
	 public static void main(String[] args) throws IOException {
	 Java2Sh j2=new Java2Sh();
	 long a=System.currentTimeMillis();
	 j2.chmodrun("/shh.sh");
	 j2.shellFile("/shh.sh");
	 long b=System.currentTimeMillis();
	 System.out.println("==========="+(b-a));
//	 j2.writeData();
	}
	
}

其中shh.sh内容为:

mysql -h localhost -u root -ppwd < /loaddata.sql > /dblog

loaddata.sql内容为:

use dbname;
LOAD DATA INFILE '/mysql2.txt' INTO TABLE testTable FIELDS TERMINATED BY ',' (cardnum,cardpwd,times);
commit;


介于个人水平,贴出来仅供参考,欢迎告诉我更简便高效的方式,先谢过了。

下载本文
显示全文
专题