为MSSQL和Oracle准备一份用于检索日期的声明?

时间:2012-02-23 12:08:02

标签: java sql-server oracle datetime prepared-statement

我想从MsSql和Oracle数据库中收集数据。因此,我使用预准备语句,因为我需要数据BETWEEN a start和enddate。

鉴于数据库:

所以在MSSQL我有这些专栏:

  • Startdate - >数据类型:DATETIME
  • Enddate - >数据类型:DATETIME
  • 名称 - >数据类型:VARCHAR(100)

Oracle中,我有相同的列,但其他数据类型:

  • Startdate - >数据类型:Date
  • Enddate - >数据类型: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 :(得分:0)

感谢所有,我自己的错误,我正在监督!我为我的startdate添加了别名,并将此别名命名为'from'。显然这不起作用!