我是从JSP发送一个月类型字符串的servlet,然后再从servlet的道。我怎样才能获得的年份和月份,从这个字符串?

问题描述 投票:0回答:1

我应该如何将字符串转换为年MMMM格式在MySQL中,还是我把它转换的控制器部分?假设:2019-02是越来越保存为2019-02,但我想另一列,将2019-02年至2019年二月转换。

JSP部分

<form action="YearMonthController" method="post">

    <input type="hidden" name="command" value="CREATE_YearMonth" />

    Month with year: <input type="month" name="year_month">

    <input type="submit">

</form>

这是控制器部

private void create_a_yearMonth_controller(HttpServletRequest request, HttpServletResponse response)
        throws Exception {

    String _yearMonth = request.getParameter("year_month");

    YM ym = new YM(_yearMonth);

    _ymDAO.create_a_yearMonth_dao(ym);

}

这是DAO部

public void create_a_yearMonth_dao(YM ym) throws Exception {

    Connection connection = null;
    PreparedStatement prepared_statement = null;

    try {
        connection = data_source.getConnection();

        String sql = "INSERT INTO `years_months`\r\n" + "(yearMonth) \r\n" + "VALUES \r\n" + "(?);";

        prepared_statement = connection.prepareStatement(sql);

        prepared_statement.setString(1, ym.get_yearMonth());

        prepared_statement.execute();
    } finally {
        close(connection, prepared_statement, null);
    }

}

这是表

CREATE TABLE `years_months` (
yearMonth VARCHAR(50) NOT NULL,
PRIMARY KEY (yearMonth)
);
mysql jdbc java-time java-date
1个回答
0
投票

由于MySQL已经没有了一年,一个月的数据类型(至少我认为没有),我将年份和月份存储为2019-02总是孤单的(所以varchar(50)列是相当广泛的用途,char(7)会做)。这是ISO 8601的格式和广泛认可。

在Java中我会用一个YearMonth的年份和月份(没有必要去创造自己的类)。并根据需求呈现格式化。 YearMonth.toString产生提到的ISO 8601格式,YearMonth.parse解析回来,所以一切都非常适合在一起。

public void createAYearMonthDao(YearMonth ym) throws SQLException {
    String sql = "INSERT INTO `years_months` (yearMonth) VALUES (?);";

    try (Connection connection = data_source.getConnection();
            PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
        preparedStatement.setString(1, ym.toString());
        preparedStatement.execute();
    }
}

要产生像2019-February的字符串时,你需要的是:

    DateTimeFormatter ymFormatter = DateTimeFormatter.ofPattern("uuuu-MMMM", Locale.ENGLISH);

    YearMonth ym = YearMonth.of(2019, Month.FEBRUARY);
    String formattedYm = ym.format(ymFormatter);
    System.out.println(formattedYm);

输出:

2019二月

YearMonth有越来越年份和月份分别的方法,例如:

    System.out.println("Year " + ym.getYear() + " month " + ym.getMonth());

2019年二月份

在评论的替代建议在MySQL中使用dateLocalDate在Java中是不坏的。优点:节省格式化和解析对储蓄和检索。缺点:你在你的数据库中获得一个月的冗余一天。

© www.soinside.com 2019 - 2024. All rights reserved.