使用excel导入nummeric单元格

时间:2018-01-14 15:52:31

标签: java excel

我正在尝试将excel文件导入到我的数据库中。我的代码在这里。代码只能导入文本,但我也要导入“INT”。我已将pst.setString(1, row.getCell(0).getStringCellValue());更改为pst.setInt(1, row.getCell(0).getIntCellValue());,但这也没有成功。

   @FXML
private void importExcel(){
    try {
        conn = Database.connectdb();
        String query = "Insert into registratie(naam, lostandfoundID, kenmerken, labelnummer, luchthaven) values (?,?,?,?,?)";
        pst = conn.prepareStatement(query);

        String excelFilePath = "Bagage.xlsx";
        try (FileInputStream fileIn = new FileInputStream(new File(excelFilePath));
            XSSFWorkbook wb = new XSSFWorkbook(fileIn)) {
            XSSFSheet sheet = wb.getSheetAt(0);
            Row row;
            for(int i=1; i<=sheet.getLastRowNum(); i++){
                row = sheet.getRow(i);
                pst.setString(1, row.getCell(0).getStringCellValue());
                pst.setInt(2, row.getCell(1).getCellType());
                pst.setString(3, row.getCell(2).getStringCellValue());
                pst.setInt(4, row.getCell(3).getCellType());
                pst.setString(5, row.getCell(4).getStringCellValue());
                pst.execute();
            }            

            Alert alert = new Alert(AlertType.INFORMATION);
            alert.setTitle("BagageOverzicht");
            alert.setHeaderText(null);
            alert.setContentText("Data succesvol geïmporteerd!");
            alert.showAndWait();

        }
        pst.close();
        rs.close();
    } catch (SQLException | FileNotFoundException ex) {
        Logger.getLogger(BagageOverzichtController.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(BagageOverzichtController.class.getName()).log(Level.SEVERE, null, ex);
    }

}

3 个答案:

答案 0 :(得分:0)

尝试获取字符串值,然后将其解析为int,只需编写Integer.parseInt(yourStringValue);

答案 1 :(得分:0)

获取单元格值:始终对单元格使用正确的类型getter(getStringCellValue()getNumericCellValue(),...)。使用getCellType()方法确定单元格类型,因为有时数字存储在文本单元格中。

设置数据库值:始终根据数据库列类型使用正确的类型设置器(setString(...)setLong(...),...)。

如果getter和setter的Java类型不匹配,请使用类型转换。

这样你就可以成功。

答案 2 :(得分:0)

编辑:

使用如下所述的for循环 -

for(int i=1; i<=sheet.getLastRowNum(); i++){
    try{
        row = sheet.getRow(i);
        pst.setString(1, row.getCell(0).getStringCellValue());
        pst.setInt(2, row.getCell(1).getNumericCellValue());
        pst.setString(3, row.getCell(2).getStringCellValue());
        pst.setInt(4, row.getCell(3).getNumericCellValue());
        pst.setString(5, row.getCell(4).getStringCellValue());
        pst.execute();
    } catch(NumberFormatException e){
          e.printStackTrace();
    }
}