簡體   English   中英

Java將excel文件(POI)導入mysql關於空白列

[英]Java import excel file(POI) into mysql about blank column

我試圖將 excel 文件導入數據庫(MySQL)。

當 Excel 有空列時,控制台窗口顯示錯誤消息

... 導入行 16 導入行 17 導入行 18 導入行 19 導入行 20 導入行 21 導入行 22 導入行 23 線程“main”中的異常 java.lang.NullPointerException at jdbcTest.main(jdbcTest.java:68)

如何修復此錯誤?。 我的源代碼是

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String url    =   "jdbc:mysql://localhost/dahan?characterEncoding=utf8";
    String user    =   "root";
    String password   =   "apmsetup";

    try{
        Class.forName("com.mysql.jdbc.Driver");  
        Connection con = (Connection) DriverManager.getConnection(url,user,password);  
        con.setAutoCommit(false);  
        PreparedStatement pstm1 = null ; 
        FileInputStream input = new FileInputStream("C:/Users/hyunwoo/Downloads/Personal Contacts.xls");  
        POIFSFileSystem fs = new POIFSFileSystem( input );  
        @SuppressWarnings("resource")
        HSSFWorkbook wb = new HSSFWorkbook(fs);  
        HSSFSheet sheet = wb.getSheetAt(0); 
        Row row;
        String del = "DROP TABLE IF EXISTS `dahanMail`";
        /*String cre = "CREATE TABLE `dahanMail` (`Fullname`  varchar(50),`Firstname`  varchar(50),`Lastname`  varchar(50) ,`Nickname`  varchar(50),"
                + "`Company`  varchar(500),`Department`  varchar(500),`Position`  varchar(500),`Mail1`  varchar(50),"
                + "`Mail2`  varchar(50),`Number1`  varchar(50),`Number2`  varchar(50),`Number3`  varchar(50),"
                + "`PhoneNumber1`  varchar(50),`PhoneNumber2`  varchar(50),`Fax1`  varchar(50),`Fax2`  varchar(50),"
                + "`Address`  varchar(50),`Website`  varchar(50),`id`  int NOT NULL ,PRIMARY KEY (`id`))ENGINE=InnoDB DEFAULT CHARSET=utf8;";*/
        pstm1 = (PreparedStatement) con.prepareStatement(del);
        pstm1.execute();
        del = "CREATE TABLE `dahanMail` (`Fullname`  varchar(50) ,`Firstname`  varchar(50),`Lastname`  varchar(50) ,"
                + "`id`  int NOT NULL ,PRIMARY KEY (`id`))ENGINE=InnoDB DEFAULT CHARSET=utf8;";
        pstm1 = (PreparedStatement) con.prepareStatement(del);
        pstm1.execute();

        //String sql = "INSERT INTO dahanmail VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        String sql = "INSERT INTO dahanmail VALUES(?,?,?,?)";
        PreparedStatement pstm = (PreparedStatement) con.prepareStatement(sql);


        for(int i = sheet.getFirstRowNum(); i<=sheet.getLastRowNum(); i++){
            row = sheet.getRow(i);

                   pstm.setString(1, row.getCell(0).getStringCellValue());
                   pstm.setString(2,row.getCell(1).getStringCellValue());
                   pstm.setString(3,row.getCell(2).getStringCellValue());
                /* pstm.setString(4,row.getCell(3).getStringCellValue());
                   pstm.setString(5,row.getCell(4).getStringCellValue());
                   pstm.setString(6,row.getCell(5).getStringCellValue());
                   pstm.setString(7,row.getCell(6).getStringCellValue());
                   pstm.setString(8,row.getCell(7).getStringCellValue());
                   pstm.setString(9,row.getCell(8).getStringCellValue());
                   pstm.setString(10,row.getCell(9).getStringCellValue());
                   pstm.setString(11,row.getCell(10).getStringCellValue());
                   pstm.setString(12,row.getCell(11).getStringCellValue());
                   pstm.setString(13,row.getCell(12).getStringCellValue());
                   pstm.setString(14,row.getCell(13).getStringCellValue());
                   pstm.setString(15,row.getCell(14).getStringCellValue());
                   pstm.setString(16,row.getCell(15).getStringCellValue());
                   pstm.setString(17,row.getCell(16).getStringCellValue());
                   pstm.setString(18,row.getCell(17).getStringCellValue());*/
                   pstm.setInt(4,(int)row.getCell(18).getNumericCellValue());
                   pstm.execute();
                   pstm.clearParameters();
                   System.out.println("Import rows "+i);
               // Do something useful with the cell's contents

        }
        con.commit();
        pstm.close();
        con.close();
        input.close();
        System.out.println("Success import excel to mysql table");
    }catch(ClassNotFoundException e){
        System.out.println(e);
    }catch(SQLException ex){
        System.out.println(ex);
    }catch(IOException ioe){
        System.out.println(ioe);
    }
}
}

眾所周知(並記錄在多個其他答案中),POI 的 get cell 方法將在空單元格上返回 null。

然后您的代碼在 null 上調用 getStringCellValue,這會導致異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM