0
SELECT DateDiff("n", LastDate, Now()) as datediffs FROM UserLog WHERE ID = 1

当我从查询设计视图(MS Access)执行此查询时。这给了我几分钟的不同,就像这样:

日期差异
---------
2826

但是当我从 servlet 执行相同的查询(包括条件 ID = 1 中的静态值)时,如下所示:

strSql = "SELECT DateDiff(\"n\", LastDate, Now()) as datediffs FROM UserLog WHERE ID = 1";
recset=stmt.executeQuery(strSql);

它给了我以下错误:

[Microsoft][ODBC Microsoft Access Driver] 参数太少。预期 1。

那我怎么了?

4

2 回答 2

1

从上面写评论。

如果

SELECT TOP 5 id, lastdate FROM UserLog 

运行,那么您需要查看语句的其他各个部分。例如,如果数据库丢失了引用,Now() 可能会导致问题。

但是,您报告

我执行了 SELECT DateDiff(\"n\", LastDate, '20-08-2012 5:15:10 PM') 没有执行。当我尝试这个 SELECT LastDate, NOW() FROM ... 时,它已成功执行。所以我怀疑问题出在 Datediff() 函数上。(——@hims056,OP)

这很奇怪,因为 DateDiff 通常在 MS Access 之外工作。但是,我注意到Oracle Bugs中报告了这个问题。在评论中,有人提到在他或她的情况下,问题是列名错误,因此可以使用 ACE 而不是 Jet 进行连接。或者,正如您所说,“在几分钟内从 Java 获取 datediff”。

于 2012-08-20T12:22:27.063 回答
0

尝试使用 PreparedStatement 代替:

strSql = "SELECT DateDiff(\"n\", LastDate, Now()) as datediffs FROM UserLog WHERE ID = ?";
PreparedStatement ps = conn.prepareStatement(strSql);
ps.setInt(1, 1);
recset = ps.executeQuery();
于 2012-08-20T10:57:59.930 回答