CSV文本数据导入工具实现

BI系统数据的导入导出会经常碰到,如何实现简易的通用导入工具呢?而不需要每次都单独开发程序实现excel数据导入。我们可以采用opencsv来解析文本文件,具体思路如下:

1.文本文件导入上传服务器

可通过jquery的ajaxfileupload异步上传,不详加描述,网上有很多相关帮助实例;

2.CSV/TXT等文本格式数据文件解析入库

代码实例:

long startTime=System.currentTimeMillis(); //计时开始
conn = SQLHandler.getInstance().getConnection(“warehouse”);

stmt = conn.createStatement(1004, 1007);
rs = stmt.executeQuery(“select * from ” + tableName
+ ” where 1=2 “);
ResultSetMetaData rsmd = rs.getMetaData();
int cols = rsmd.getColumnCount(); //获取表的列数
String paraStr = “”;
for (int i = 0; i < cols; i++) {
paraStr += “?”;
if (i < cols – 1) {
paraStr += “,”;
}
}

conn.setAutoCommit(false);
String sql = “INSERT INTO ” + tableName + ” VALUES (” + paraStr
+ “)”; //构建insert sql

pstmt = conn.prepareStatement(sql);

// 全量需先清空表数据
if (importType.equals(“2″)) {
stmt.executeUpdate(“truncate table ” + tableName);
}

File file = new File(filePath);

CSVReader reader = new CSVReader(new FileReader(PropertyUtil
.getProperty(“export.path”)
+ file.getName()),delimiter.toCharArray()[0]);
String[] nextLine = null;

while ((nextLine = reader.readNext()) != null) { //逐行导入
int colNum=(nextLine.length>cols?cols:nextLine.length);
for (int i = 0; i < colNum; i++) {
//System.out.println(nextLine[i] + ” “);
pstmt.setObject(i + 1, nextLine[i]);
}
//列数据补全
if(nextLine.length<cols)
{
for(int j=nextLine.length;j<cols;j++)
{
pstmt.setObject(j + 1, “”);
}
}
pstmt.executeUpdate();
cnt++;
if(cnt%1000==0){
System.out.println(“累计导入”+cnt+”条记录”);
}
}

conn.commit();
long endTime=System.currentTimeMillis();
message = “文本数据入库成功,共导入” + cnt + “条记录!\n耗时”+(endTime-startTime)+”ms!”;

综上,采用jdbc逐条写入方式实现起来比较灵活,但对于大批量数据导入效率是不太理想,经测试1W条3字段的文本数据完成导入需70s左右。再大量级的数据导入建议后台操作或采用相关数据库工具,避免过长的页面等待时间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值