java处理较大数据量到mysql

php中文网
发布: 2016-06-07 15:47:00
原创
1923人浏览过

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


 

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

   

<span>public class DBbatchdeal {
	
	/**
	 * 
	 * @param conn      jdbc链接
	 * @param tableName 表明
	 * @param lists  数据集
	 * @param n      每行字段个数 出去自增字段
	 * @param flag  第一列是否自增字段
	 * @return  是否成功
	 */
	public boolean deal(Connection conn,String tableName,ArrayList<String[]> 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<n-1;i++){
        	sql.append("?, ");
        }
        sql.append("?);");
        int size=lists.size();
        int m= (true==flag?n-1:n);
        
        PreparedStatement preStmt=null;
        long a=System.currentTimeMillis();
            try {
				preStmt = conn.prepareStatement(sql.toString(),ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
            for(int j=0;j<size;j++){
            	String[] str=lists.get(j);
            	for(int k=0;k<n;k++){
                preStmt.setString(k+1, str[k]);
            	}
                preStmt.addBatch();
                if(j%100==0){
                	preStmt.executeBatch();
                    preStmt.clearBatch();
                }
            } 
            	preStmt.executeBatch();
            }
            catch (SQLException e) {
				e.printStackTrace();
			}finally{
				try {
					if(null!=preStmt){
					preStmt.close();
					}
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			long b=System.currentTimeMillis();
			System.out.println("插入"+size+"条数据所需要的时间:"+(b-a));
             return true;
}
	
			public static void main(String[] args) throws ClassNotFoundException, SQLException {
				 Class.forName("com.mysql.jdbc.Driver");
				 Connection conn=DriverManager.getConnection("jdbc:mysql://ip***/db", "root", "pwd");
			     DBbatchdeal deal=new DBbatchdeal();
			     ArrayList<String[]> lists =new ArrayList<String[]>();
			     for(int i=0;i<10000;i++){
			    	 String[] str={"1307"+i,"passwd"+i,"20130709121212"};
			    	 lists.add(str);
			     }
			     deal.deal(conn, "testTable", lists, 3, true);
			}
	
}
</span>
登录后复制


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

结果如下:

                          java处理较大数据量到mysql

Java2Sh内容如下:

J.LB.PurchaseStore
J.LB.PurchaseStore

基于jsp+javabean+mysql三层结构的动态购物网站。网站用户接口(即界面)由jsp完成,数据和逻辑处理由beans完成,数据储存由mysql完成。因为beans独立负责处理整个网站的绝大部分数据,所以整个网站的负载量和速度都将大大提高。而且jsp的特性是一次运行,永远储留内存(包括bean在内),所以基于这种语言和结构开发的购物系统的优势是其它语言没法比尔的。更重要的是,jsp+bea

J.LB.PurchaseStore 0
查看详情 J.LB.PurchaseStore

立即学习Java免费学习笔记(深入)”;

           

<span>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("
");
		   }
		   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();
	}
	
}
</span>
登录后复制

其中shh.sh内容为:

    mysql -h localhost -u root -ppwd /dblog

loaddata.sql内容为:

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


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

相关标签:
java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号