2012-02-23 65 views
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数据库?
  • 如何使用通用日期时间格式从两个数据库中收集日期时间? (或者我需要检测的数据库类型,并做一些具体的东西?
+0

请出示你的'taskSql'为好。 – Perception 2012-02-23 12:26:36

+0

编辑后,以显示正确的SQL语句 – adis 2012-02-23 12:29:26

+0

尝试传递java.sql.Dates而不是java.sql.Timestamps。 – Perception 2012-02-23 12:56:07

回答

0

感谢所有,自己的错误,我是监督!我说我STARTDATE一个别名,叫这个别名为'from'。显然,这不能工作!