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左右。再大量级的数据导入建议后台操作或采用相关数据库工具,避免过长的页面等待时间。

你可能感兴趣的:(ajaxFileUpload,csv,opencsv)