Я хочу собрать данные из баз данных 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?
- Как я могу использовать общий формат даты и времени для сбора даты и времени из обеих баз данных? (Или мне нужно определить тип базы данных и сделать что-то конкретное?