2017-08-07 166 views
0

我很难想象一个执行此操作的好方法。正如你可以通过下面的代码看到的,我正在经历每一行并获得每个单元格的值。但是,实际运行查询将其添加到表中时,如果您一次可以输入整行,则会更容易。虽然我不想为Excel文档中的每个列分别创建一个值,但有足够的列/可变性。关于如何更有效地运行这个任何想法?将Excel单元格推送到Teradata(或其他数据库)格式

for (int i=1; i<rowNum; i++) { 
        XSSFRow row = ws.getRow(i) ; 
         for (int j = 0; j<colNum; j++) { 
          XSSFCell cell = row.getCell(j) ; 
          String value = cell.getStringCellValue(); 
          data[i][j] = value ; 
          System.out.println("the value is " + value); 
          stmt.executeUpdate("INSERT INTO databasetable VALUES(" + value + ")"); 
         } 
       } 
+0

由于该代码为每个单元格(而不是每行)插入一条新记录,因此并未真正遵循。无论如何,teradata可能会提供导入工具。是Java所需? –

+0

我宁愿导出为CSV并快速加载它 - 非常简单,需要64k +工作表上的时间。只是一个想法。 –

回答

0

您可以在工作表上生成一个迭代器以使其更有效。

喜欢的东西下面

public static Vector read(String fileName) { 
    Vector cellVectorHolder = new Vector(); 
    try{ 
     FileInputStream myInput = new FileInputStream(fileName); 
     XSSFWorkbook myWorkBook = new XSSFWorkbook(myInput); 
     XSSFSheet mySheet = myWorkBook.getSheetAt(0); 
     Iterator rowIter = mySheet.rowIterator(); 
     while(rowIter.hasNext()){ 
      XSSFRow myRow = (XSSFRow) rowIter.next(); 
      Iterator cellIter = myRow.cellIterator(); 
      List list = new ArrayList(); 
      while(cellIter.hasNext()){ 
       XSSFCell myCell = (XSSFCell) cellIter.next(); 
       list.add(myCell); 
      } 
      cellVectorHolder.addElement(list); 
     } 
    }catch (Exception e){e.printStackTrace(); } 
    return cellVectorHolder; 
} 
+0

有趣的选择在2017年使用'矢量'。 – Kayaman

+0

其实我想提到他的迭代器...数据结构是你的选择:) – Jeyaprakash

0

我结束了使用concentation,只是在插入,各值之间的循环。

相关问题