2016-06-30 4 views
1

Я использую Java для хранения некоторых записей из файла csv. Одна из этих записей - это дата. Проблема здесь в том, что я использую JDBC для хранения этих записей в базе данных. Теперь объект Date Java отображает ошибку, помещая ее в базу данных. Я застрял на этом некоторое время. Пожалуйста, дайте мне знать, как это решить. Я использовал тип Date в mysql для его хранения в базе данных. Вот часть, создающая проблему.Дата JDBC до даты SQL

DateFormat d1 = new SimpleDateFormat("yyyy-MM-dd"); 
Date d = new Date(); 
System.out.println(d1.format(d)); 
String sql = "INSERT INTO TESTING"+ 
      "VALUES("+"DATE_FORMAT("+d+","+"'%Y-%m-%d'"+"))"; 
stmt.executeUpdate(sql); 

Если я выполняю это непосредственно в MySqlWorkBench, он правильно сохраняет дату. Но через JDBC это проблема.

Ошибка, как показано ниже:

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Jun 30 14:04:03 IST 2016,'%Y-%m-%d'))' at line 1 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3277) 
    at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1402) 
    at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1317) 
    at payex.writeDB(payex.java:221) 
    at payextestdrive.main(payextestdrive.java:11) 
+2

«Теперь, объект Дата Java показывает ошибку, помещая его в базу данных» - Какие ошибки? Использование конкатенации строк - это * не * правильное решение здесь ... вы должны абсолютно использовать PreparedStatement, но вам нужно использовать 'java.sql.Date', а не' java.util.Date'. –

+0

Вы можете ссылаться на этот пост тоже http://stackoverflow.com/questions/2305973/java-util-date-vs-java-sql-date – shazinltc

+1

'' INSERT INTO TESTING "+" VALUES ... 'не может work – wero

ответ

1

Сообщение об ошибке довольно ясно

right syntax to use near 'Jun 30 14:04:03 IST 2016,'%Y-%m-%d'))' 

Формат Предоставленный MMM DD HH: мм: сс Z YYYY, но система ожидает, что% Y-% m-% d

Пробег

DateFormat d1 = new SimpleDateFormat("yyyy-MM-dd"); 
Date d = new Date(); 
System.out.println(d1.format(d)); 
String sql = "INSERT INTO TESTING"+ 
      " VALUES("+"DATE_FORMAT('"+d1.format(d)+"',"+"'%Y-%m-%d'"+"))"; 
stmt.executeUpdate(sql); 

или просто

DateFormat d1 = new SimpleDateFormat("yyyy-MM-dd"); 
Date d = new Date(); 
System.out.println(d1.format(d)); 
String sql = "INSERT INTO TESTING"+ 
      " VALUES('"+d1.format(d)+"')"; 
stmt.executeUpdate(sql); 
+0

Привет, за ваш ответ. Я пробовал это, но получаю исключение. –

+0

com.mysql.jdbc.MysqlDataTruncation: Data усечение: Неправильное значение даты и времени: '2008' \t на com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:2983) \t в com.mysql.jdbc.MysqlIO.sendCommand (MysqlIO.java:1631) \t в com.mysql.jdbc.MysqlIO.sqlQueryDirect (MysqlIO.java:1723) \t на com.mysql.jdbc.Connection.execSQL (Connection.java:3277) \t в com.mysql.jdbc.Statement.executeUpdate (Statement.java:1402) \t в com.mysql.jdbc.Statement.executeUpdate (Statement.java:1317) \t at payex.writeDB (payex.java:221) at payextestdrive.main (payextestdrive.java:11) –

1

Вы добавляете d.toString() в команду SQL, если вы хотите добавить отформатированную строку даты. Кроме того, пространство отсутствует между именем таблицы и VALUES:

String sql = "INSERT INTO TESTING VALUES(DATE_FORMAT(" + d1.format(d) +",'%Y-%m-%d'))"; 
+0

Эй, я попробовал это. Спасибо за Ваш ответ. Но снова есть исключение. –

+0

com.mysql.jdbc.MysqlDataTruncation: Данные усечение: Неправильное значение даты и времени: '2008' \t на com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:2983) \t в com.mysql.jdbc.MysqlIO.sendCommand (MysqlIO.java:1631) \t at com.mysql.jdbc.MysqlIO.sqlQueryDirect (MysqlIO.java:1723) \t в com.mysql.jdbc.Connection.execSQL (Connection.java:3277) \t в com.mysql.jdbc.Statement.executeUpdate (Statement.java:1402) \t на ком .mysql.jdbc.Statement.executeUpdate (Statement.java:1317) \t at payex.writeDB (payex.java:220) \t at payextestdrive.main (payextestdrive.java:11) –

Смежные вопросы