2017-06-29 15 views
0

ユーザーのデータをエクセルファイルに保存してMySQLデータベースに保存するコードを作成しました。私はそれを実行している間、日付は間違っている以外はすべて正常に動作します。 Excelファイルでは、日付形式はdd.MM.yyyyですが、MySQLの日付形式はyyyy-MM-ddです。データベースに保存する際に日付形式を変換するためにコード内で何をすべきですか?Javaを使用してデータベースに保存する際にExcelデータの日付形式を変更する

これらはコードです:

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

あなたは「日付」の文字列はどこですか?日付として保管してください –

+0

私はその例を挙げることができますか?はい。 StringからDateに変更した場合、等号(=)の後にはどうすればよいでしょうか?申し訳ありませんが、これはまだ初心者です。 –

答えて

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、動作していない、それはスレッドmain "でjava.text.ParseException:Unparseable date:" dd.MM.yyyy " –

0

メッセンジャーを撃たないでください。 :-)

私が覚えている限り、日付はMS Excelでさまざまな形式になる可能性があり、どの形式が使用されたのかをApache POIで判断する方法はありません。誰かが私にここで間違っていると言えるのなら、私は楽しむべきです。

MySQLに日付を格納する場合は、データ型がdateの列に格納することをお勧めします。そのような列には書式はありません。あなたはそれをユーザに提示する(またはJSONにシリアル化するなどの理由で)文字列表現が必要な場合にのみ、カラムから日付をフォーマットしたいでしょう。

関連する問題