簡體   English   中英

如何使用Java將mm-dd-yyyy(來自csv文件中的數據)的格式更改為yyyy-mm-dd存儲在MySql中

[英]How to change format of mm-dd-yyyy(of data from csv file) to be stored as yyyy-mm-dd in MySql using Java

數據存在於csv文件中。 我正在使用CSVReader讀取每一行,然后將相應的值存儲在數據庫中。 因此,在讀取字符串時,我使用“-”(日期格式類似於01-02-1997)分割日期字符串,並將其存儲在數組中,然后交換數組的三個元素並將其存儲回db中。 有沒有更好的辦法。

CSV文件中的示例行數據:

10001   MICHELLE    VILLEGAS3   Savings SRINATH MICHELLE.VILLEGAS3@NOBODY.COM   Y   10-7-18 1050 WEST FIFTH STREET      AZUSA   IND 917023308

它僅以逗號分隔。

private static void readCsv(String tableName) throws FileNotFoundException, IOException, SQLException {
    CSVReader csvreader = null;

    try{
        Reader reader = Files.newBufferedReader(Paths.get(filePath));
        csvreader = new CSVReaderBuilder(reader).withSkipLines(1).build();
        sql = "insert into ? values (?,?,?,?,?,?,?,?,?,?,?,?,?)";
        ManageDBResource.createConnectionToDB();
        pstmt = ManageDBResource.conn.prepareStatement(sql);
        pstmt.setString(1, tableName);

        String[] rowData = null;

        while((rowData = csvreader.readNext()) != null) {

            int i = 2;

            for (String data : rowData) {

                if(i == 8 && data != null && rowData[12] != "IND") {
                    String[] date = data.split("-");
                    String temp = date[0];
                    date[0] = date[1];
                    date[1] = temp;
                }
                pstmt.setString(i++,data);
                //System.out.print(data + " ");
            }
            //System.out.println();
        }
        int result = pstmt.executeUpdate();
        if(result == 1) {
            System.out.println("Data loaded Successfully.");

        }
    }
    finally {
        pstmt.close();
        csvreader.close();
    }

我到底如何在Java程序中使用STR_TO_DATE()函數。 抱歉,我是編程新手,感謝您的幫助。

為什么不使用Java的SimpleDateFormat呢?

例如

java.text.SimpleDateFormat source = new java.text.SimpleDateFormat("MM-dd-yyyy");
java.util.Date date = source.parse(data);
java.text.SimpleDateFormat target = new java.text.SimpleDateFormat("yyyy-MM-dd");
data = target.format(date);

或更好:現代的java.time API

DateTimeFormatter source = DateTimeFormatter.ofPattern("MM-dd-yyyy");
LocalDate date = LocalDate.parse(data, source);
DateTimeFormatter target = DateTimeFormatter.ofPattern("yyyy-MM-dd");
data = date.format(target);

這很簡單。 這個問題開始,並將您的列數據(字符串)轉換為java.sql.date 現在,使用prepared語句的setDate方法將日期傳遞給您的插入查詢:

pstmt.setDate(i++, dateObject);

不必擔心mysql將如何存儲它。 您始終可以查詢數據庫以獲取所需格式的日期值。 可以將您使用的工具(例如SQL Developer等)配置為以特定格式顯示日期。

您可以使用

final DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("MM-dd-yyyy");
LocalDate localDate = LocalDate.parse("01-20-2018", dateFormat);
pstmt.setDate(i, java.sql.Date.valueOf(localDate));

如果解析失敗,則parse方法將引發DateTimeParseException

所以你可以

LocalDate localDate = null;
try {
     localDate = LocalDate.parse("01-20-2018", dateTimeFormat);
} catch(DateTimeParseException e) {
     e.printStackTrace();
     //some action that should be taken in case it fails
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM