最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

java处理较大数据量到mysql

来源:动视网 责编:小采 时间:2020-11-09 07:23:37
文档

java处理较大数据量到mysql

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


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;


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

文档

java处理较大数据量到mysql

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

最新推荐

猜你喜欢

热门推荐

专题
Top