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

クエリデザインビュー(MS Access)からこのクエリを実行すると。これは私に次のように数分で違うものを与えます:

datediffs
---------
2826

しかし、次のようにサーブレットから同じクエリ(条件ID = 1の静的値を含む)を実行すると、次のようになります。

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

次のエラーが発生します。

[Microsoft] [ODBCMicrosoftAccessドライバー]パラメーターが少なすぎます。期待される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は通常MSAccessの外部で機能するため、これは奇妙なことです。ただし、この問題がOracleBugsで報告されていることに気付きました。コメントの中で、ある人は、自分の場合、問題は列の名前が間違っていたため、接続にJetではなくACEを使用できる可能性があると述べています。あるいは、あなたが言うように、「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 に答える