Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取多维Excel并导入数据库_Java_Mysql_Excel_Arraylist_Apache Poi - Fatal编程技术网

Java 读取多维Excel并导入数据库

Java 读取多维Excel并导入数据库,java,mysql,excel,arraylist,apache-poi,Java,Mysql,Excel,Arraylist,Apache Poi,我使用ApachePOI和MySQL使用以下Excel将记录插入数据库: A列B列C列D列E列 V1 V2 V3 100 200 300 Axx Bxx Cxx 1说明1 3 10 2说明2 3 12 3说明3 3 2 23 4说明4 11 31 5说明5 23 22 1 我希望将这些数据导入到DB的三个单独的表中: 第一个表:列C1、C2、C3的值作为行插入到一个表中,后续列(D、E)仅考虑前三行。我可以毫无问题地完成这项工作,并将列索引作为id字段存储在该表中。 表1:

我使用ApachePOI和MySQL使用以下Excel将记录插入数据库:

A列B列C列D列E列
V1 V2 V3
100      200      300
Axx Bxx Cxx
1说明1 3 10
2说明2 3 12
3说明3 3 2 23
4说明4 11 31
5说明5 23 22 1
我希望将这些数据导入到DB的三个单独的表中:

第一个表:列C1、C2、C3的值作为行插入到一个表中,后续列(D、E)仅考虑前三行。我可以毫无问题地完成这项工作,并将列索引作为id字段存储在该表中。 表1:

3 V1 100 Axx
4v2100 Bxx
5 V3 300 Cxx

第二个表:我还可以将A列和B列的行以及rownum的值作为 表2:

4 1说明1
5.2说明2
6.3说明3
...
...
第三个表:这是我遇到的最低点,无法保存单元格(C列,第4行)及其值的映射。预期的结果是有一个带有值的映射表,如下所示: 表3预期:

431
4 4 3
4 5 10
我尝试了Arraylist的Map、LinkedHashMap和Arraylist的选项,但失败了,在同一次读取迭代中,我无法创建Arraylist的Arraylist,这是表3所需的输出


请告知使用HashMap、ArrayList或LinkedHashMap的合适方法

public int handleSheet(Sheet s){
...
...
//top level iterator for whole sheet
Iterator<Row> rowIterator = sheet.iterator();
while(rowIterator.hasNext()) {
Row row = (Row) rowIterator.next();
int fcell=row.getPhysicalNumberOfCells();
    for (int c = 0; c < fcell; c++) {
    //invoke second iteration via fn call

    if (cell.getColumnIndex() > 1) {
        insertFirstDim(sheet, cell.getColumnIndex());
    }

    if (row.getRowNum > 4){ 
    insertSecondDim(sheet, row.getRowNum());
    }

    insertData(row.getRowNum,cell.getColumnIndex());

    }   
}
....
....
return status;
}

private int insertFirstDim(Sheet s , int columnIndex) {
        Iterator<Row> rowIterator = sheet.iterator();
        columndata = new ArrayList<>();
        columndata.add(columnIndex+"");
        while (rowIterator.hasNext()) {
            Row row = rowIterator.next();
            Iterator<Cell> cellIterator = row.cellIterator();
            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
        if(cell.getColumnIndex() == columnIndex){// To match column index
        //do stuff here insert in DB
        }
    }
}


private int insertSecondDim(Sheet s , int rowNum) {
        Iterator<Row> rowIterator = sheet.iterator();
        ArrayList<> columndata = new ArrayList<>();
        columndata.add(rowNum+"");
        while (rowIterator.hasNext()) {
            Row row = rowIterator.next();
            Iterator<Cell> cellIterator = row.cellIterator();
            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
        //do stuff here
        }
    }
}

private int insertData(int rowNum,int columnIndex) {
        Iterator<Row> rowIterator = sheet.iterator();
        columndata = new ArrayList<>();
        columndata.add(columnIndex+"");
        while (rowIterator.hasNext()) {
            Row row = rowIterator.next();
            Iterator<Cell> cellIterator = row.cellIterator();
            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
        // using rownum and columnIndex stored earlier pick the select cell for values
         if (rowNum == row.getRowNum() && columnIndex == cellgetColumnIndex()){
         // pick cell values

          }
        }
    }
}
public int手册(第s页){
...
...
//整个工作表的顶级迭代器
迭代器rowIterator=sheet.Iterator();
while(roweiterator.hasNext()){
行=(行)行迭代器。下一步();
int fcell=row.getPhysicalNumberOfCells();
对于(int c=0;c1){
insertFirstDim(sheet,cell.getColumnIndex());
}
如果(row.getRowNum>4){
insertSecondDim(sheet,row.getRowNum());
}
insertData(row.getRowNum,cell.getColumnIndex());
}   
}
....
....
返回状态;
}
私有int insertFirstDim(表s,int列索引){
迭代器rowIterator=sheet.Iterator();
columndata=新的ArrayList();
columndata.add(columnIndex+“”);
while(roweiterator.hasNext()){
行=行迭代器。下一步();
迭代器cellIterator=row.cellIterator();
while(cellIterator.hasNext()){
Cell=cellIterator.next();
如果(cell.getColumnIndex()==columnIndex){//匹配列索引
//在DB中插入这里的内容
}
}
}
专用int insertSecondDim(图纸s,int rowNum){
迭代器rowIterator=sheet.Iterator();
ArrayList columndata=新的ArrayList();
columndata.add(rowNum+“”);
while(roweiterator.hasNext()){
行=行迭代器。下一步();
迭代器cellIterator=row.cellIterator();
while(cellIterator.hasNext()){
Cell=cellIterator.next();
//在这里做事
}
}
}
私有int insertData(int rowNum、int columnIndex){
迭代器rowIterator=sheet.Iterator();
columndata=新的ArrayList();
columndata.add(columnIndex+“”);
while(roweiterator.hasNext()){
行=行迭代器。下一步();
迭代器cellIterator=row.cellIterator();
while(cellIterator.hasNext()){
Cell=cellIterator.next();
//使用之前存储的rownum和columnIndex,为值选择“选择”单元格
if(rowNum==row.getRowNum()&&columnIndex==cellgetColumnIndex()){
//拾取单元格值
}
}
}
}