我应该如何将字符串转换为年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已经没有了一年,一个月的数据类型(至少我认为没有),我将年份和月份存储为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中使用date
和LocalDate
在Java中是不坏的。优点:节省格式化和解析对储蓄和检索。缺点:你在你的数据库中获得一个月的冗余一天。