从Excel工作表中读取多行并存储到数据库

时间:2016-12-20 10:47:13

标签: java hibernate ms-office

我试图从excel表读取多行并将它们复制到java对象然后我使用hibernate将该对象存储到数据库。

实施例 -

  • 我有userTravelBO java Object。对于这个对象属性,我正在从excel表中读取值。
  • 如果excel表只有一行,那么它就能正常工作。
  • 如果excel表包含多行,那么从第二行开始,值不会设置为userTravelBO对象。

以下是我尝试的代码。

  

从Excel文件中获取工作表。

@Override
public Response addingUserFromExcel(String filename) {
    // TODO Auto-generated method stub
    File myFile = new File(filename);
    XSSFWorkbook myWorkBook = null;
    XSSFSheet mySheet = null;
    FileInputStream fis = null;
    int i = 0;
    try {
        fis = new FileInputStream(myFile);
        myWorkBook = new XSSFWorkbook(fis);
        while (i < myWorkBook.getNumberOfSheets()) {
            mySheet = myWorkBook.getSheetAt(i);
            switch(i){
            case 0 : addindUserToTable(mySheet);
                     break;
            case 1:  addVehicleToTable(mySheet);
                     break;
            case 2:  addTripToTable(mySheet);
                     break;
            case 3: addPackageToTable(mySheet);
                     break;
            }
            i++;

        }
        HashMap praf = new HashMap();
        praf.put("message", "uploaded successfully");
        return Response.ok(praf).build();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return Response.ok("file uploaded but not added to table").build();
    }


}
  

将值设置为UserTravelBO对象的属性并将其存储到DB。

    public Response addindUserToTable(XSSFSheet mySheet) {
    UserTravelBo userBO = null;
    Iterator<Row> rowIterator = mySheet.iterator();
    int j = 0;
    while (rowIterator.hasNext()) {
        userBO = new UserTravelBo();//creating a new object for each row.

        Row row = rowIterator.next();
        if(row.getRowNum()==0){
               continue; //just skip the rows if row number is 0 because it is heading
         }
        else{
        Iterator<Cell> cellIterator = row.cellIterator();
        while (cellIterator.hasNext()) {
            Cell cell = cellIterator.next();

            switch (j) {
            case 0:
                userBO.setUsername(cell.getStringCellValue());
                System.out.println("Excel"+cell.getStringCellValue());
                break;
            case 1:
                userBO.setPassword(cell.getStringCellValue());
                break;
            case 2:
                userBO.setHint(cell.getStringCellValue());
                break;
            case 3:
                userBO.setFirstname(cell.getStringCellValue());
                break;
            case 4:
                userBO.setMiddlename(cell.getStringCellValue());
                break;
            case 5:
                userBO.setLastname(cell.getStringCellValue());
                break;
            case 6:
                userBO.setStreet(cell.getStringCellValue());
                break;
            case 7:
                userBO.setArea(cell.getStringCellValue());
                break;
            case 8:
                userBO.setCity(cell.getStringCellValue());
                break;
            case 9:
                userBO.setState(cell.getStringCellValue());
                break;
            case 10:
                userBO.setCountry(cell.getStringCellValue());
                break;
            case 11:
                userBO.setPostalcode(cell.getStringCellValue());
                break;
            case 12:
                userBO.setTelephone(cell.getStringCellValue());
                break;
            case 13:
                userBO.setEmail(cell.getStringCellValue());
                break;
            case 14:
                userBO.setRolename(cell.getStringCellValue());
                break;
            case 15:
                userBO.setStatus(cell.getBooleanCellValue());
                break;

            default:
                break;
            }
            j++;
        }
    }
        System.out.println(userBO.getUsername());//for first row getting valid output but for the second row i am getting null.
        addUser(userBO);
    }
    return Response.ok("file uploaded and added to table").build();
}
  

这里我为每个行迭代创建新的UserTravelBO对象,然后为什么会这样发生。我没有得到这个。

     

有一件事在我脑海中浮现,用户与地址表有一对一的关系,因为这只发生了这件事。我不知道我是对还是错。

1 个答案:

答案 0 :(得分:1)

这是我的错误。我在每行的while循环之外初始化变量j = 0.当一行完成“j”时,变量应该再次初始化为零,但我没有那样做。

  

以下是正确的代码。

public Response addindUserToTable(XSSFSheet mySheet) {
UserTravelBo userBO = null;
Iterator<Row> rowIterator = mySheet.iterator();
//int j = 0; Here i was doing wrong
while (rowIterator.hasNext()) {
    userBO = new UserTravelBo();//creating a new object for each row.
    Row row = rowIterator.next();
    if(row.getRowNum()==0){
           continue; //just skip the rows if row number is 0 because it is   heading
     }
    else{
    int j = 0;//Here j should be initiated
    Iterator<Cell> cellIterator = row.cellIterator();
    while (cellIterator.hasNext()) {
        Cell cell = cellIterator.next();

        switch (j) {
        case 0:
            userBO.setUsername(cell.getStringCellValue());
            System.out.println("Excel"+cell.getStringCellValue());
            break;
        case 1:
            userBO.setPassword(cell.getStringCellValue());
            break;
        case 2:
            userBO.setHint(cell.getStringCellValue());
            break;
        case 3:
            userBO.setFirstname(cell.getStringCellValue());
            break;
        case 4:
            userBO.setMiddlename(cell.getStringCellValue());
            break;
        case 5:
            userBO.setLastname(cell.getStringCellValue());
            break;
        case 6:
            userBO.setStreet(cell.getStringCellValue());
            break;
        case 7:
            userBO.setArea(cell.getStringCellValue());
            break;
        case 8:
            userBO.setCity(cell.getStringCellValue());
            break;
        case 9:
            userBO.setState(cell.getStringCellValue());
            break;
        case 10:
            userBO.setCountry(cell.getStringCellValue());
            break;
        case 11:
            userBO.setPostalcode(cell.getStringCellValue());
            break;
        case 12:
            userBO.setTelephone(cell.getStringCellValue());
            break;
        case 13:
            userBO.setEmail(cell.getStringCellValue());
            break;
        case 14:
            userBO.setRolename(cell.getStringCellValue());
            break;
        case 15:
            userBO.setStatus(cell.getBooleanCellValue());
            break;

        default:
            break;
        }
        j++;
    }
}
    System.out.println(userBO.getUsername());//for first row getting valid    output but for the second row i am getting null.
    addUser(userBO);
}
return Response.ok("file uploaded and added to table").build();
}

谢谢。