2015-10-20 26 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) { 
    } 
    } 
}