Как вставить дату в mysql?

Я пытаюсь вставить дату в mySql db. Я принимаю дату как строку и анализирую ее, чтобы использовать util.Date, затем преобразовываю ее в sql.Date, а затем вставляю в базу данных. Вот мой код

SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); 
String mydate=dsd.getDoa();
Date mydate2=format.parse(mydate);
java.sql.Date sqlDate;
sqlDate = new java.sql.Date(mydate2.getTime());
System.out.println("Date"+sqlDate.getDate()+"Month"+sqlDate.getMonth()+"Year"+sqlDate.getYear());

....

int i=st.executeUpdate("insert into device_sales_details values("+sqlDate+")); 

Ошибка следующая,

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: '1980' for column 'device_sales_details_DOA' at row 1

Sysout печатает следующим образом для ввода 22/12/2014

Date22Month11Year114 Как решить эту проблему, может ли кто-нибудь помочь мне в этом, пожалуйста.


person Raghu    schedule 23.12.2014    source источник
comment
Как дата хранится в вашей базе данных?   -  person Harry    schedule 23.12.2014
comment
Что выводит desc device_sales_details в mysql?   -  person Vimal Bera    schedule 23.12.2014
comment
@VimalBera в описании поле имеет тип даты   -  person Raghu    schedule 23.12.2014
comment
что касается вашего вопроса заголовка, и если ваш столбец даты в mysql имеет тип даты, вам не нужно преобразовывать java.sql.Date sqlDate; вам следует напрямую вставить значение java.util.Date в mysql.   -  person Ye Win    schedule 23.12.2014
comment
@ Гарри, я использую sqlyog, и да, он показывает 2014-10-10 даты.   -  person Raghu    schedule 23.12.2014
comment
@YeWin Я пробовал, выдало ошибку. .   -  person Raghu    schedule 23.12.2014


Ответы (1)


Используйте PreparedStatement. Почти никогда не бывает правильным использовать конкатенацию строк для создания кода SQL для отправки через JDBC.

PreparedStatement ps = connection.prepareStatement("insert into device_sales_details values(?)");
ps.setDate(1, sqlDate);
int i = ps.executeUpdate();

Подробнее об отказе от конкатенации строк здесь: http://bobby-tables.com.


Отдельно обычно лучше указывать столбцы при выполнении вставки, например: insert into device_sales_details (columnName) values (?)

person T.J. Crowder    schedule 23.12.2014
comment
Да, спасибо, это решило мою проблему, я пробовал с PreparedStatement, но не понял, почему мой sysout выдает такой результат. - person Raghu; 23.12.2014