2016-02-22 1 views
-1

У меня есть текстовое поле для ввода даты в формате dd-mm-yyyy, теперь, как я могу вставить эту дату в MySQL в формате yyyy-mm-dd. Я пишу код для JDBC.Я ввел дату через JDBC, магазины MySQL в другой форме

String effecteddate=jtextField1.getText(); 
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
java.util.Date myDate = formatter.parse(effecteddate); 
java.sql.Date sqlDate = new java.sql.Date(myDate.getTime()); 
int x=st.executeUpdate("insert into virus values('"+sqlDate+"')"); 

Я вошел в эту дату 12.05.2010, код выполняется без какого-либо сообщения об ошибке и успешной вставки отображается, но когда я проверил в MySQL таблице я нашел дату в этом форм-0017-10-31

Что такое проблема?

+1

В вашей базе данных, что тип данных столбца вы пытаться вставить? Также, похоже, вы вводите недопустимую дату. Правильно? Разве это не должно быть 2010-12-05? – Sh4d0wsPlyr

+0

Вы ввели дату как строку '' 12-05-2010 '', но использовали формат '' yyyy-MM-dd'''? Это кажется неправильным, и я надеюсь, что ваш код выведет на него ошибку. Кроме того, * никогда, никогда, никогда не используйте конкатенированные строки для размещения значений в вашем SQL. Он просто запрашивает проблемы (уязвимости SQL-инъекций). – jpmc26

+0

@ Sh4d0wsPlyr Добавил ваше наблюдение к моему ответу. – Andreas

ответ

1

Задача 1 является то, что вы должны использовать PreparedStatement:

String sql = "insert into virus values(?)"; 
try (PreparedStatement stmt = conn.prepareStatement(sql)) { 
    stmt.setDate(new java.sql.Date(myDate.getTime())); 
    stmt.executeUpdate(); 
} 

Задача 2 является то, что дата строка, которую вы дали (12-05-2010), не соответствует образцу вашего SimpleDateFormat, т.е. yyyy-MM-dd(как отмечено @ Sh4d0wsPlyr).
Это настоящая ошибка.

Чтобы доказать, что, запустите следующий код:

String effecteddate="12-05-2010"; 
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
//formatter.setLenient(false); 
java.util.Date myDate = formatter.parse(effecteddate); 
java.sql.Date sqlDate = new java.sql.Date(myDate.getTime()); 
System.out.println(sqlDate); // prints: 0017-10-31 

Если раскомментировать setLenient(false) вызов, вы получите:

java.text.ParseException: Unparseable date: "12-05-2010" 
    at java.text.DateFormat.parse(DateFormat.java:335) 
    . . . 
Смежные вопросы