2013-08-05 49 views
-1

heloo ... 我有一個問題,當我想在我的代碼中使用日期 我有一個名爲ReportService的類,在這個類中我使用jdbc連接我的數據庫,之後我想從我的數據庫在一個特殊的date.frist我寫這篇文章:如何在PreparedStatement參數中設置特殊日期?

("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

如果您在查詢本身中使用to_date函數,那麼您應該傳遞字符串da然後它會被數據庫轉換爲日期,但是如果你沒有使用to_date函數,那麼你必須通過Date對象 – Vijay

+0

你的格式字符串不能是正確的:to_date('31 -jul-2013','DD-MON- YYYY')「);至少對於oracle來說。但格式字符串中的MM和日期爲七月的日期無法工作 – lkdg

回答

1

當您在sql查詢中使用函數to_date時,應該在您的java代碼中使用setString(int,String)。當你想在Java代碼中使用使用setDate(int,Date),查詢應該如下所示:

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

並設置請求報告的日期。

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

如果你想使用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()); 
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()));