2017-06-29 62 views
0

我有我的代码编写来保存我的用户的数据在excel文件到MySQL数据库。当我运行它时,除日期错误外,一切正常。在excel文件中,日期格式是dd.MM.yyyy,而MySQL中的日期格式是yyyy-MM-dd。在我的代码中,我应该如何转换日期格式并将其保存到数据库中?更改日期格式的Excel日期数据,同时保存到数据库与Java

这些代码:

import java.io.FileInputStream; 
import java.sql.*; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 
import java.util.Vector; 
import org.apache.poi.xssf.usermodel.XSSFCell; 
import org.apache.poi.xssf.usermodel.XSSFRow; 
import org.apache.poi.xssf.usermodel.XSSFSheet; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

public class ExcelToDb { 
    public static void main(String [] args) { 
     String fileName="testing.xlsx"; 
     Vector dataHolder=read(fileName); 
     saveToDatabase(dataHolder); 
    } 
    public static Vector read(String fileName) { 
     Vector cellVectorHolder = new Vector(); 
     try{ 
      FileInputStream myInput = new FileInputStream(fileName); 
      //POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput); 
      XSSFWorkbook myWorkBook = new XSSFWorkbook(myInput); 
      XSSFSheet mySheet = myWorkBook.getSheetAt(0); 
      Iterator rowIter = mySheet.rowIterator(); 
      while(rowIter.hasNext()){ 
       XSSFRow myRow = (XSSFRow) rowIter.next(); 
       Iterator cellIter = myRow.cellIterator(); 
       //Vector cellStoreVector=new Vector(); 
       List list = new ArrayList(); 
       while(cellIter.hasNext()){ 
        XSSFCell myCell = (XSSFCell) cellIter.next(); 
        list.add(myCell); 
       } 
       cellVectorHolder.addElement(list); 
      } 
     }catch (Exception e){e.printStackTrace(); } 
     return cellVectorHolder; 
    } 
    private static void saveToDatabase(Vector dataHolder) { 
     String activityId=""; 
     String activityName=""; 
     String activityAllocation=""; 
     String activityDate=""; 
     String activityPersonInCharge=""; 
     System.out.println(dataHolder); 

     for(Iterator iterator = dataHolder.iterator();iterator.hasNext();) { 
      List list = (List) iterator.next(); 
      activityId= list.get(0).toString(); 
      activityName= list.get(5).toString(); 
      activityAllocation= list.get(8).toString(); 
      activityDate= list.get(10).toString(); 
      activityPersonInCharge= list.get(11).toString(); 


      try { 
       Class.forName("com.mysql.jdbc.Driver").newInstance(); 
       Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/TEST", "root", "password"); 
       System.out.println("connection made..."); 
       PreparedStatement stmt=con.prepareStatement("INSERT INTO TEST_DEMO(ACT_ID,ACT_NAME,ACT_ALLOCATION,ACT_DATE,ACT_PERSON_ON_CHARGE) VALUES(?,?,?,?,?)"); 
       stmt.setString(1, activityId); 
       stmt.setString(2, activityName); 
       stmt.setString(3, activityAllocation); 
       stmt.setString(4, activityDate); 
       stmt.setString(5, activityPersonInCharge); 
       stmt.executeUpdate(); 

       System.out.println("Data is inserted"); 
       stmt.close(); 
       con.close(); 
      } catch (ClassNotFoundException e) { 
       e.printStackTrace(); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } catch (InstantiationException e) { 
       e.printStackTrace(); 
      } catch (IllegalAccessException e) { 
       e.printStackTrace(); 
      } 
     } 



     } 
    } 

请提供日期格式部分一些线索。

在此先感谢。

+0

你在哪里Date是Strings?将它们保存为日期 –

+0

我可以举个例子吗?好的。如果我从字符串更改为日期,那么等号(=)后应该是什么?对不起,仍然是这个新手。 –

回答

0
You just try this: 
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); 
Date dt = sdf.parse("your date field"); 
sdf.applyPattern("yyyy-MM-dd"); 
res = sdf.format(dt); 
+0

一个代码只有答案不是高质量。请编辑您的答案以解释您的代码,说明为什么以及如何解决问题,并链接到任何相关文档。 –

+0

@Manchikanti,不工作,它给我在线程“主”异常java.text.ParseException:Unparseable日期:“dd.MM.yyyy” –

0

不要拍摄信使。 :-)

据我记得日期可以在MS Excel中以不同的格式,并且您无法通过Apache POI确定使用哪种格式。如果有人能告诉我我在这里错了,我应该享受。

要在MySQL中存储日期,您需要将其存储在数据类型为date的列中。这样的列没有格式。只有在将其呈现给用户(或将其序列化为JSON或出于某种其他原因需要字符串表示形式)的情况下,才需要从列中格式化日期。