... 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();
我不知道应该写什么而不是+++++
感谢
答案 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()));