Один подготовленный оператор для MSSQL и Oracle для получения дат? - PullRequest
0 голосов
/ 23 февраля 2012

Я хочу собрать данные из баз данных MsSql и Oracle. Поэтому я использую подготовленный оператор, потому что мне нужны данные BETWEEN начало и конец.

Данные базы данных:

Так что в MSSQL у меня есть эти столбцы:

  • Начальная дата -> Тип данных: DATETIME
  • Конечная дата -> Тип данных: DATETIME
  • Имя -> Тип данных: VARCHAR(100)

В Oracle У меня есть те же столбцы, но другие типы данных:

  • Начальная дата -> Тип данных: Date
  • Конечная дата -> Тип данных: Date
  • Имя -> Тип данных: VARCHAR2(100)

Теперь я хочу собрать данные с помощью следующего подготовленного оператора SQL:

String taskSql = "" +
" SELECT startdate, enddate, name" + 
" FROM TASKS" + 
" WHERE startdate BETWEEN ? AND ?" +
"  AND enddate BETWEEN ? AND ?";

Эта информация о дате и времени в базе данных постоянно смущает меня, и каждый раз, когда я меняю свой код, похоже, что он работает, но при тестировании на другой базе данных он ломается.

Мой Java-код для сбора данных:

Calendar cal = Calendar.getInstance();
cal.setTime(aEndDate);
cal.add(Calendar.HOUR, 23);
cal.add(Calendar.MINUTE, 59);
cal.add(Calendar.SECOND, 59);
Date endDate = cal.getTime();

java.sql.Timestamp sqlStartDate = new java.sql.Timestamp(startDate.getTime());
java.sql.Timestamp sqlEndDate = new java.sql.Timestamp(endDate.getTime());

System.out.println(sqlStartDate);  // prints 2012-02-23 00:00:00.0
System.out.println(sqlEndDate);    // prints 2012-02-23 23:59:59.0

PreparedStatement prepStatement = null;
ResultSet resultSet = null;

prepStatement = DB.getConnection().prepareStatement(taskSql);
prepStatement.setTimestamp(1, sqlStartDate);
prepStatement.setTimestamp(2, sqlEndDate);
prepStatement.setTimestamp(3, sqlStartDate);
prepStatement.setTimestamp(4, sqlEndDate);
resultSet = prepStatement.executeQuery();

К сожалению, я не использую JodaTime, следующий проект я буду использовать, потому что я прочитал некоторые хорошие вещи об этой библиотеке.

Мои вопросы / проблемы:

  • Можно ли использовать подготовленный оператор в Java для баз данных MSSQL и Oracle?
  • Как я могу использовать общий формат даты и времени для сбора даты и времени из обеих баз данных? (Или мне нужно определить тип базы данных и сделать что-то конкретное?

1 Ответ

0 голосов
/ 24 февраля 2012

Спасибо всем, собственная ошибка, которую я наблюдал! Я добавил псевдоним для моей начальной даты и назвал этот псевдоним 'from'. Очевидно, что это не может работать!

...