2015-06-22 3 views
-2

Я попытался импортировать файл excel в базу данных (MySQL).Java import excel file (POI) в mysql о пустой столбец

Когда Excel имеет пустой столбец, окно консоли показывает сообщение об ошибке

... Импорт строк 16 Импорт строк 17 Импорт строк 18 Импорт строк 19 Импорт строк 20 Импорт строк 21 Импорт строк 22 Импорт строк 23 Исключение в потоке «главный» java.lang.NullPointerException в 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); 
    } 
} 
} 
+0

что такое полная трассировка стека? –

+0

Возможный дубликат [Ошибка Как читать пустую ячейку в excell] (http://stackoverflow.com/questions/11155428/error-how-to-read-empty-cell-in-excell) – llogiq

ответ

0

Хорошо известно (и описано в нескольких других ответов), что метод прибудете ячейки POI будет возвращать нуль на пустые ячейки.

Затем ваш код вызывает getStringCellValue на нуле, что вызывает исключение.

+0

благодарит ваш комментарий, не могли бы вы пожалуйста, покажите пример источника? –

Смежные вопросы