如何在PreparedStatement参数中设置特殊日期?

时间:2013-08-05 09:52:10

标签: java jdbc prepared-statement parameter-passing

... heloo 我想在代码中使用日期时遇到问题 我有一个名为ReportService的类,在这个类中我使用jdbc来连接我的数据库,之后我想从我的数据库中获取一个特殊日期的报告。我写这个:

("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 个答案:

答案 0 :(得分:2)

如您的第一个SQL查询所示,to_date()函数需要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'));

答案 1 :(得分:1)

在sql查询中使用函数to_date时,应在java代码中使用setString(int,String)。如果要在java代码中使用setDate(int,Date),则查询应如下所示:

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

并设置您请求报告的日期。

答案 2 :(得分:0)

TO_DATE()需要String和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();

如果您想使用rs.setDate(),则不再需要SQL查询中的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());

答案 3 :(得分: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()));