繁体   English   中英

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

[英]how can i set a special date in PreparedStatement parameters?

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();

我不知道应该写些什么,而不是+++++

谢谢

如您的第一个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'));

在SQL查询中使用函数to_date时,应在Java代码中使用setString(int,String) 当您想在Java代码中使用use setDate(int,Date)时,查询应如下所示:

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

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

TO_DATE()需要一个String以及Date格式。 因此,您需要使用rs.setString()并像直接运行查询时所传递的那样传递Date格式。

使用字符串日期:

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());

这也将起作用...

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()));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM