大批量导入

Action:

public String readbig() {
long a=System.currentTimeMillis();
operatorCode = (String) getSessionValue("operatorCode");
String testSql = "LOAD DATA LOCAL INFILE 'sql.csv' IGNORE   INTO TABLE chargesystem.mobile_block (mobile,datetime,type)";
List getlist = BulkLoadData2MySQL.getTestDataInputStream(file,operatorCode);

InputStream dataStream = (InputStream) getlist.get(0);
BulkLoadData2MySQL dao = new BulkLoadData2MySQL();
int rows =0;
try {
rows=dao.bulkLoadFromInputStream(testSql, dataStream);
} catch (Exception e) {
System.out.println(e.toString());
}
int z = (int)getlist.get(2)-(int)getlist.get(1)-rows;
msg="导入成功"+rows+"条,有"+(int)getlist.get(1)+"条格式错误,共有"+z+"条重复";
//导入
// msg = blackListService.lead(file, fileFileName, operatorCode);        
ServletActionContext.getResponse().setContentType("text/html;charset=utf-8");
try {
ServletActionContext.getResponse().getWriter().println(msg);
} catch (IOException e) {
e.printStackTrace();
}
 System.out.println("执行耗时 : "+(System.currentTimeMillis()-a)+" ms ");
 final ServletContext context = ServletActionContext.getServletContext();//.put("blackMobile", true);
 context.setAttribute("blackMobile", true);
  Timer timer = new Timer();  
       timer.schedule(new TimerTask() {  
           public void run() {  
            context.setAttribute("blackMobile", false);
             System.out.println("===================");
           }  
       }, 1000 * 60*60*24*3);// 设定指定的时间time,此处为2000毫秒  
return SUCCESS;
}

----------------------------------------------------------------------------------------------------------

util:

package com.edl.utils;



import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


import javax.sql.DataSource;


import org.apache.log4j.Logger;
import org.hibernate.mapping.Array;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;


/**
 * @author seven
 * @since 07.03.2013
 */
public class BulkLoadData2MySQL {


private static final Logger logger = Logger.getLogger(BulkLoadData2MySQL.class);
private Connection conn = null;
private JdbcTemplate jdbcTemplate;

public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}


public static List getTestDataInputStream(File file,String operatorCode) {
int x = 0;   //格式错误的条数
int y = 0; //总几条
StringBuilder builder = new StringBuilder();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
System.out.println(df.format(new Date()));// new Date()为获取当前系统时间
try{
InputStream in = new FileInputStream(file);
// BufferedReader br=new BufferedReader(new FileReader(file));
BufferedReader br=new BufferedReader(new InputStreamReader(in,"UTF-8"));
String line  ;
Pattern pattern = Pattern.compile("^1[3|4|5|7|8][0-9]\\d{8}$");
while((line=br.readLine())!=null){
y++;
Matcher matcher = pattern.matcher(line.trim());
if(!matcher.matches()){
x++;
continue;
}
builder.append(line.trim());
builder.append("\t");  
builder.append(df.format(new Date()));
builder.append("\t");  
builder.append(operatorCode);
builder.append("\n");  
}
 }catch(Exception e){
  System.out.println(e.toString());
 }
byte[] bytes = builder.toString().getBytes();
InputStream is = new ByteArrayInputStream(bytes);
List list = new ArrayList();
list.add(is);
list.add(x);
list.add(y);
return list;
}


/**

* load bulk data from InputStream to MySQL
*/
public int bulkLoadFromInputStream(String loadDataSql,
InputStream dataStream) {
if(dataStream==null){
logger.info("InputStream is null ,No data is imported");
return 0;
}
int result = 0;
try{
ApplicationContext context = new ClassPathXmlApplicationContext("spring/applicationContext.xml"); 
jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
conn = jdbcTemplate.getDataSource().getConnection();
PreparedStatement statement = conn.prepareStatement(loadDataSql);


if (statement.isWrapperFor(com.mysql.jdbc.Statement.class)) {


com.mysql.jdbc.PreparedStatement mysqlStatement = statement.unwrap(com.mysql.jdbc.PreparedStatement.class);


mysqlStatement.setLocalInfileInputStream(dataStream);
result = mysqlStatement.executeUpdate();
}
}catch(Exception e){
System.out.println(e.toString());
}
System.out.println(result);
System.out.println("--------------------------------------");
return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值