Ошибка Java Dateformat
Я использую плагин JDatechooser NetBeans Swing для разработки настольных приложений. По умолчанию его формат даты равен мм / дд / гг, но это не тот формат, который требуется для дБ. Мне нужно преобразовать его в формат гггг-мм-дд. Я попытался с классом SimpleDateformat, и это дает мне следующую ошибку: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: '8/29/11' for column 'registered_date' at row 1
может кто-нибудь дать мне хорошее решение, чтобы сделать это правильно
Спасибо
2 ответа
Попробуй это:
Date date = ...
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String date_for_mysql = df.format(date);
Смотрите соответствующие ответы SO здесь:
Как разобрать дату?
Форматирование даты Java?
Преобразование типа MySql DateTime во что-то более дружественное
Как сохранить тип даты Java для типа даты MySQL?
Конвертировать дату в формат даты MYSQL
Как преобразовать дату в строке в Sql даты?
Как установить текущую дату в столбец даты MySQL из Java?
Ваша база данных вообще не требует определенного формата даты - вы не должны вставлять данные в виде строки. Вы должны использовать подготовленное заявление и использовать setDate
, В идеале вы должны выполнять как можно меньше строковых преобразований - вам это не нужно, когда вы получаете значение из JDateChooser
и вам не нужен при вставке в базу данных:
// Unfortunately you need to convert from java.util.Date to java.sql.Date
statement.setDate(1, new java.sql.Date(chooser.getDate().getTime()));
(Обратите внимание, что вам потенциально нужно помнить о часовых поясах, но это другой вопрос... вы можете позвонить setDate
перегрузка, которая тоже забирает календарь.)
Если вы вставляете (или запрашиваете) данные, создавая полный оператор SQL, включая значения, вам следует немедленно прекратить это делать. Вы не только сталкиваетесь с подобными проблемами преобразования, но также открываете себя для атак с использованием SQL-инъекций. Всегда используйте подготовленный оператор и указывайте любой параметр в качестве параметров, а не включайте их в SQL.