mm-dd存储在mysql中

slwdgvem  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(308)

数据存在于csv文件中。我使用csvreader读取每一行,然后在数据库中存储相应的值。因此,在读取字符串时,我使用“-”(日期格式类似于01-02-1997)分割日期字符串并存储在数组中,然后交换数组的三个元素并将其存储回数据库。有没有更好的办法。
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\u to\u date()函数。抱歉,我是编程新手,谢谢你的帮助。

apeeds0o

apeeds0o1#

你可以用

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
}
2j4z5cfb

2j4z5cfb2#

为什么不用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 应用程序编程接口

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

h6my8fg23#

很简单。从这个问题开始,将列数据(字符串)转换为 java.sql.date . 现在使用prepared语句的setdate方法将日期传递给insert查询:

pstmt.setDate(i++, dateObject);

不用担心mysql将如何存储它。您可以随时查询数据库以获得所需格式的日期值。您使用的工具(如SQLDeveloper等)可以配置为以特定格式显示日期。

相关问题