将excel单元格推送到Teradata(或其他数据库)格式

时间:2017-08-07 19:31:30

标签: java database teradata

我很难想象一种执行此操作的好方法。正如您在下面的代码中所看到的,我会遍历每一行并获取每个单元格的值。但是,在实际运行查询以将其添加到表中时,如果您可以一次输入整行,则会更容易。虽然我不想为excel文档中的每一列创建单独的值,但列数/变异性足够大。关于如何更有效地运行这个的任何想法?

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 + ")");
                        }
                }

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

我最终使用了浓缩,只是在for循环中的每个值之间插入了一个。