Вопрос по java, jdbc – Как получить вход в формате yyyyMMddHHmm в Java?

3
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
java.util.Date parsedDate = sdf.parse("201212130900");
java.sql.Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime());
try
{
  PreparedStatement pstmt = connection.prepareStatement(
    "select count(*) as counter from table1 where table_key > ?");
  pstmt.setTimestamp(1,new java.sql.Timestamp(timestamp.getTime()));  
  ResultSet rs = pstmt.executeQuery();  
  while(rs.next()){
    System.out.println(rs.getInt( 1 ));
  }
  connection.close();
}
catch(Exception g){
  System.err.println(g.getMessage());
}

В выводе я получаю ошибку как

ORA-01843: недействительный месяц.

Кто-нибудь может помочь решить вышеуказанную ошибку?

Ваша колонкаtable_key» такое TIMESTAMP? Gandalf
Йогендра Сингх ... с desc table1 и для table_key я вижу, что это как CHAR (24) ... так что я пытаюсь сделать с полем даты, но на самом деле он объявил CHAR в БД? больше преобразование я должен сделать? Prashanth K
Это может помочь, если вы опубликовали определение таблицы. Кроме того, вы можете заставить запрос работать с помощью интерактивного инструмента SQL? Aaron Kurtzhals
Аарон .. Я вижу, что table_key имеет тип CHAR Prashanth K

Ваш Ответ

3   ответа
1

В Java, чтобы получить форматированную дату, вы должны сделать следующее:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
String sdf.format(myDate);

Есть множество вариантов вSimpleDateFormat, Я приложил JavaDoc для вас.

Isn»т ОП использует то же самое? Yogendra Singh
не уверен что это значитIsn»т, используя тот же " ? не могли бы вы уточнить это немного подробнее Prashanth K
0

Я решил вышеупомянутую проблему.

Я преобразовал дату в "YYyyMmDd» отформатировать и преобразовать время в "HHMM» формат, сохраняя их в виде 2 разных строк.

1

ботает).

Ваша проблема может быть в часовом поясе или что-то. Попробуйте вместо этого использовать этот метод,

setTimestamp(int parameterIndex, Timestamp x, Calendar cal) 

Пример:

setTimestamp(1, timestamp , Calendar.getInstance(TimeZone.getTimeZone("UTC")))

ОБНОВЛЕНО: (table1.table_key - это CHAR (24))

Вы должны дать вам дату из Java в строке, предполагая, что key_value отформатирован как "ГГГГММДДЧЧмм»... (по понятным причинам другой формат не будет работать)

Другой вариант в вашем запросе конвертировать key_value в TIMESTAMP

Попробуй (Яя предполагаю, что вы работаете с oracle db, и я делаю некоторые поиски)

1) Сделай "бросать" к метке времени

выберите count (*) в качестве счетчика из таблицы1, где отметка времени (table_key)>? "

2) Использованиеhttp://docs.oracle.com/cd/B19306_01/server.102/b14200/functions193.htm , Я не знаю, можете ли вы сделать что-то вроде этого: "

выберите счетчик (*) в качестве счетчика из таблицы1, где TO_TIMESTAMP (таблица_ключ, 'ГГГГММДДЧЧММХХ24МИ ')>? "

Ваша проблема в том, что вы сравниваете две разные вещи ... nms
Я пытался, как это pstmt.setTimestamp (1, новый java.sql.Timestamp (timestamp.getTime ()), Calendar.getInstance (TimeZone.getTimeZone ("УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ"))); и я получил ошибку ORA-01861: литерал не соответствует строке формата. Попытался ли я правильно? Prashanth K
Хорошо. Некоторые вопросы: Вы используете базу данных Oracle? Пожалуйста, обновите ваш пост, указав определение таблицы. какой часовой пояс и локаль определены в вашей базе данных? Другое дело, что вы можете просто указать в качестве параметра метку времени, которую вы создали выше. nms
nms ... не могли бы вы рассказать подробнее о том, как преобразовать строку в метку времени ... в соответствии с кодом, который я разместил выше? Prashanth K

Похожие вопросы