[英]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.