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() 函数接受 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 代码中使用。当您想setDate(int,Date)在 java 代码中使用 use 时,您的查询应如下所示:

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

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

于 2013-08-05T09:58:08.617 回答
0

TO_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(),则不再需要TO_DATE()在 SQL 查询中使用 。

使用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 回答
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 回答