我试图从excel表读取多行并将它们复制到java对象然后我使用hibernate将该对象存储到数据库。
实施例 -
以下是我尝试的代码。
从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对象,然后为什么会这样发生。我没有得到这个。
有一件事在我脑海中浮现,用户与地址表有一对一的关系,因为这只发生了这件事。我不知道我是对还是错。
答案 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();
}
谢谢。