2015-10-20 34 views
1

我想插入使用JDBC經理與Apache POI從Excel數據導入MySQL數據庫表。這裏是我的代碼:插入數據到MySQL從Excel的JDBC - POI示例程序

TestApp.java

package testapp; 

import java.io.FileInputStream; 
import java.io.IOException; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.poifs.filesystem.POIFSFileSystem; 
import org.apache.poi.ss.usermodel.Row; 

public class TestApp { 

    public static void main(String[] args) throws Exception { 

     try { 

      Class.forName("com.mysql.jdbc.Driver"); 
      Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/test","root","root"); 
      con.setAutoCommit(false); 
      PreparedStatement pstm = null ; 
      FileInputStream input = new FileInputStream("countrycode.xls"); 
      POIFSFileSystem fs = new POIFSFileSystem(input); 
      HSSFWorkbook wb = new HSSFWorkbook(fs); 
      HSSFSheet sheet = wb.getSheetAt(0); 
      Row row; 
      for(int i=1; i<=sheet.getLastRowNum(); i++){ 
       row = sheet.getRow(i); 
       String code = row.getCell(0).getStringCellValue(); 
       String desc = row.getCell(1).getStringCellValue(); 
       Date date = row.getCell(2).getDateCellValue();     
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
       String Date = sdf.format(date); 
       String callcode = row.getCell(3).getStringCellValue(); 
       Boolean status = row.getCell(4).getBooleanCellValue(); 
       String currency = row.getCell(5).getStringCellValue(); 
       String sql = "INSERT INTO Ocountry (OCCODE, OCDESC, OCDT, OCCALlCODE, OCINACTIVE, OCUCODE) VALUES('"+code+"','"+desc+"','"+date+"','"+callcode+"','"+status+"','"+currency+"')"; 
       pstm = (PreparedStatement) con.prepareStatement(sql); 
       pstm.execute(); 
       System.out.println("Import rows "+i); 
      } 
      con.commit(); 
      pstm.close(); 
      con.close(); 
      input.close(); 
      System.out.println("Success import excel to mysql table"); 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

這是當我運行該文件中給出的錯誤:

Exception in thread "main" java.lang.NullPointerException 
    at testapp.TestApp.main(TestApp.java:36) 
Java Result: 1 

是否有任何人能幫助我解決我的問題?

+0

您似乎沒有被檢查的細胞具有閱讀它之前的值。如果你這樣做會怎樣? – Gagravarr

+0

我已檢查它,它能夠將值存儲到數據庫中。問題已經解決了。 – susu

+0

只要運行與調試您的應用程序,並在第36行 –

回答

1

看起來它不喜歡這一行:

String Date = sdf.format(date);

你確定變量date有在這一點上一個非空值?

+0

設置一個斷點,我設置日期時間的我的數據類型在MySQL的非空。 – susu

0

我使用的代碼。它肯定能行,我修改了它如下:

import java.io.FileInputStream; 
import java.io.IOException; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import org.apache.poi.poifs.filesystem.POIFSFileSystem; 
//import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.ss.usermodel.*; 

public class TestApp { 

public static void main(String[] args) throws Exception { 

    try { 

     Class forName = Class.forName("com.mysql.jdbc.Driver"); 
     Connection con = null; 
     con = DriverManager.getConnection("jdbc:mysql://localhost/tables", "root", "root"); 
     con.setAutoCommit(false); 
     PreparedStatement pstm = null; 
     FileInputStream input = new FileInputStream("C:\\Users\\Desktop\\a1.xls"); 
     POIFSFileSystem fs = new POIFSFileSystem(input); 
     Workbook workbook; 
     workbook = WorkbookFactory.create(fs); 
     Sheet sheet = workbook.getSheetAt(0); 
     Row row; 
     for (int i = 1; i <= sheet.getLastRowNum(); i++) { 
      row = (Row) sheet.getRow(i); 
      String name = row.getCell(0).getStringCellValue(); 
      String add = row.getCell(1).getStringCellValue(); 

      int contact = (int) row.getCell(2).getNumericCellValue(); 

      String email = row.getCell(3).getStringCellValue(); 

      String sql = "INSERT INTO employee (name, address, contactNo, email) VALUES('" + name + "','" + add + "'," + contact + ",'" + email + "')"; 
      pstm = (PreparedStatement) con.prepareStatement(sql); 
      pstm.execute(); 
      System.out.println("Import rows " + i); 
     } 
     con.commit(); 
     pstm.close(); 
     con.close(); 
     input.close(); 
     System.out.println("Success import excel to mysql table"); 
    } catch (IOException e) { 
    } 
    } 
}