2011-02-10 4 views
3

Я пытаюсь сделать это:как исправить ошибку при вставке DATETIME в БД

pr.setStartdate("2006-09-10T00:00:00"); 

Я получаю эту ошибку:

java.sql.SQLDataException: The syntax of the string representation of a datetime value is incorrect. 

какие-либо идеи о том, как успешно вставить было бы здорово ,

здесь немного больше кода. Теперь мне нужно setDate? или setString работает для begintime, endtime и date? они все объекты DATETIME:

PreparedStatement pstmt = conn.prepareStatement("UPDATE Event SET date=?, begintime=?, endtime=?, status=?, productionid=?, conceptual_packageid=? WHERE id=?"); 
     pstmt.setString(1, pkg.getDate()); 
     pstmt.setString(2, pkg.getBeginTime()); 
     pstmt.setString(3, pkg.getEndTime()); 
     pstmt.setString(4, pkg.getStatus()); 
     pstmt.setString(5, pkg.getProductionID()); 
     pstmt.setString(6, pkg.getConceptual_PackageID()); 
     pstmt.setString(7, pkg.getId()); 

     pstmt.executeUpdate(); 
     pstmt.close(); 
+0

Пробуйте параметр даты передачи в одинарных кавычках. – Rachel

+0

Я пробовал это, но я получаю строки ошибок, говорящие: «Незакрытый буквенный символ, а не утверждение»; Я довольно удивлен здесь и кажется таким простым – novicePrgrmr

+0

Что такое 'pr'? Я не думаю, что это готовое заявление –

ответ

6

Я предлагаю вам использовать методы setTimestamp (...) и setDate (...) PreparedStatement, а затем передать в них фактические объекты Date, а не работать со строками. Если вы ограничены работать со строками в классе «пр», а затем преобразовать строки в формате, указанном в derby doc, а затем использовать следующий код

java.sql.Timestamp.valueOf("time/date converted"); 
+0

Таким образом: ps.setTimestamp (Timestamp.valueOf (" 2006-09-10 00:00:00 ")); –

2

Dates, times, and timestamps cannot be mixed with one another in expressions. Derby supports the following formats for TIMESTAMP:

yyyy-mm-dd hh:mm:ss[.nnnnnn]
yyyy-mm-dd-hh.mm.ss[.nnnnnn]

The year must always have four digits. Months, days, and hours may have one or two digits. Minutes and seconds must have two digits. Nanoseconds, if present, may have between one and six digits.

Таким образом, вы должны заменить 'T' с пространством или дефис.

+0

Пробовал это, все еще получая ту же ошибку. – novicePrgrmr

3

Из того, что я могу сказать, котелок не имеет «DATETIME» тип данных, они поддерживают DATE, TIME и TIMESTAMP.

http://db.apache.org/derby/docs/10.10/ref/crefsqlj31068.html

Таким образом, я хотел бы убедиться, что вы объявляете о колонке «Дата» как TIMESTAMP, если вы желаете, чтобы сохранить и время и значение даты в этой области.

Во-вторых, я бы назвал имя столбца «дата», поскольку DATE является зарезервированным типом данных. Я не знаю, будет ли здесь проблема, но может попробовать.

В-третьих, при установке/получении столбца «дата» я бы попытался использовать set/getTimestamp и передать/назначить объект java.sql.Timestamp, где это применимо.

Надеюсь, что это поможет.

1

В случае, если кто-то сталкивается с этим месячным вопросом (как и я), выполняющим аналогичную, но не идентичную операцию: внимательно посмотрите на два формата ответа Лев Хомича: между днем ​​и часом есть двоеточие между час/мин и тире между днем ​​/ часом с периодами между часами/мин. Я просто имел дело, используя инструкцию SQL с периодами между часами/минутами, где пробел между днем ​​и часом вызывал ошибку, но тире не было.

Я привык к DB2, который принимает тире или пробел при использовании периодов между часами/мин и мин/сек, что делает его еще проще упускать из вида. Я просто предполагал, что пространство или тире разрешено между днем ​​и часом.

+0

Я получаю ошибку, что временная метка не в правильном формате: можете ли вы рассказать мне, что не так? Вот мой INSERT stt: INSERT INTO APP.MYTABLE VALUES ('2012-09-10 08:32:22 [.1020]'); – user907810

+1

У меня нет тестовой среды, настроенной для проверки этого, но я не знаю ни одной БД, которая допускает квадратные скобки в формате даты. квадратные скобки - довольно стандартная нотация в * описании * формат, указывающий, что часть в скобках является необязательной. Но я думаю, что ваша проблема, скорее всего, скобки не могут появиться. Просто вытащите [и]. – arcy

0

Я была такая же проблема, я нашел решение здесь:

http://apache-database.10148.n7.nabble.com/Date-Timestamp-format-for-inserts-td99979.html

В основном вы должны использовать этот формат:

yyyy-mm-dd-hh.mm.ss[.nnnnnn] 

Для случаев, эта вставка работает для меня:

statement.executeUpdate("INSERT INTO animal VALUES (1, 1, 'Elsa', '2006-09-10-00.00.00')"); 
Смежные вопросы