Поскольку 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 месяц ФЕВРАЛЬ
Альтернативное предложение в комментариях использовать date
в MySQL и LocalDate
в Java также неплохо.Pro: Вы сохраняете форматирование и анализ при сохранении и извлечении.Con: У вас есть избыточный день месяца в вашей базе данных.