0

heloo ...コードで日付を使用するときに問題が発生しましたReportServiceという名前のクラスがあり、このクラスではjdbcを使用してデータベースに接続し、その後、特別な方法でデータベースからレポートを取得したいと考えていますdate.frist 私はこれを書きます:

("select sum(cost) from mem_income where trunc(date_out) = to_date ('31-jul-2013' , 'dd-mm-yyyy')");

これはうまくいきますが、その後、メインクラスから日付を渡したいです:

PreparedStatement pst =
conn.prepareStatement("select sum(cost) from mem_income where trunc(date_in) = to_date (?)");
pst.setDate(1, +++++ );
ResultSet rs = pst.executeQuery();

+++++の代わりに何を書けばいいのかわからない

ありがとう

4

4 に答える 4

2

最初の SQL クエリに示されているように、to_date() 関数は 1 つだけでなく 2 つの引数を取ります。そして、これらの引数はどちらも文字列であり、日付ではありません。

したがって、コードを次のように変更できます

PreparedStatement pst =
    conn.prepareStatement("select sum(cost) from mem_income where trunc(date_in) = to_date(?, 'dd-mm-yyyy')");
pst.setString(1, '31-jul-2013');

しかし、より良いオプションは、日付を直接渡すことであり、 to_date 関数は忘れてください:

PreparedStatement pst =
    conn.prepareStatement("select sum(cost) from mem_income where trunc(date_in) = ?");
pst.setDate(1, java.sql.Date.valueOf('2013-07-31'));
于 2013-08-05T10:01:20.180 に答える
1

関数to_dateを SQL クエリで使用する場合setString(int,String)は、Java コードで使用する必要があります。Java コードでuse を使用する場合setDate(int,Date)、クエリは次のようになります。

select sum(cost) from mem_Outcome where trunc(date_out) = ?;

レポートを要求する日付を設定します。

于 2013-08-05T09:58:08.617 に答える
0

これもうまくいきます...

String Allocated_On = "03/20/2013";
DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
java.util.Date dtAllocated_On= new Date();
try {
   dtAllocated_On = (Date)formatter.parse(Allocated_On);
} catch (ParseException pe) {
   log.info("error parsing date needed: "+pe);
}
....
PreparedStatement pst =
  conn.prepareStatement("select sum(cost) from mem_income where date_in = ?");

pst.setDate(1,new java.sql.Date(dtAllocated_On.getTime()));
于 2013-12-07T11:14:13.523 に答える
0

TO_DATE()文字列と日付形式が必要です。したがってrs.setString()、クエリを直接実行したときに渡したのと同じように、日付形式を使用して渡す必要があります。

文字列日付の使用:

PreparedStatement pst = conn.prepareStatement(
   "select sum(cost) from mem_income where trunc(date_in) = to_date (?, 'dd-mm-yyyy')");

pst.setString(1, "31-jul-2013");
ResultSet rs = pst.executeQuery();

を使用する場合、SQL クエリでを使用rs.setDate()する必要はなくなりました。TO_DATE()

java.sql.Dateオブジェクトの使用:

PreparedStatement pst =
    conn.prepareStatement("select sum(cost) from mem_income where trunc(date_in) = ?");

pst.setDate(1, new java.sql.Date(
               SimpleDateFormat("dd-MMM-yyyy").parse("31-jul-2013").getTime()));
ResultSet rs = pst.executeQuery();

java.util.Dateのインスタンスがすでにある場合は、そのまま使用してください

pst.setDate(1, new java.sql.Date(utilDate.getTime());
于 2013-08-05T10:03:44.247 に答える