0
我想从MsSql和Oracle数据库收集数据。因此,我使用准备好的语句,因为我需要数据BETWEEN
开始和结束日期。一个准备好MSSQL和Oracle检索日期的语句?
鉴于数据库:
所以在MSSQL
我有这些列:
- 开始日期 - >数据类型:
DATETIME
- 结束日期 - >数据类型:
DATETIME
- 名称 - >数据类型:
VARCHAR(100)
在Oracle
我有相同的列,但其他数据类型:
- 开始日期 - >数据类型:
Date
- 结束日期 - >数据类型:
Date
- 名称 - >数据类型:
VARCHAR2(100)
现在我想用下面的Prepared SQL Statement来收集数据:
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数据库?
- 如何使用通用日期时间格式从两个数据库中收集日期时间? (或者我需要检测的数据库类型,并做一些具体的东西?
请出示你的'taskSql'为好。 – Perception 2012-02-23 12:26:36
编辑后,以显示正确的SQL语句 – adis 2012-02-23 12:29:26
尝试传递java.sql.Dates而不是java.sql.Timestamps。 – Perception 2012-02-23 12:56:07