2012-12-14 120 views
0

我有List<Object[]> resultList = entityManager.createNativeQuery(SOME QUERY).getResultList();某些查詢是內部連接表的結果。 當我嘗試訪問對象的元素[],其中一個是日期我試着這樣做將java對象轉換爲日期或日期時間

for(Object[] obj : resultList) 
{ 
Date createdDate = obj[7] !=null ? new Date(Long.valueOf(obj[7] + "")) : null; 
} 

這給了明顯的例外nested exception is java.lang.NumberFormatException: For input string: "2012-11-20" 我改變了日期爲DateTime獲得TO_CHAR(createdDate,'DD.MM .YYYY:HH24:MI:SS') 並試圖下面的代碼

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
    Date createdDate = null; 
    try 
    { 
     createdDate = df.parse(obj[7] + ""); 
    } 
    catch (ParseException e) 
    { 
     e.printStackTrace(); 
    } 

這種方法導致createdDate = NULL。 有何建議?

+2

你不應該來解析從SQL查詢中查詢cominf。他們應該回來作爲日期或時間戳實例。向我們顯示您的查詢。 –

+0

'選擇project.project_id,project.business_id,project_status_type.project_status_desc,project.create_dtm, project.update_dtm,從project_status_type INNER JOIN上project_status_type.project_status_type_id = project.project_status_type_id和project.project_id = 12345工程;' –

+1

是什麼您存儲日期的數據庫列類型?它是DateTime還是VARCHAR?如果它是DateTime作爲@JBNizet提到你只需要將你的對象轉換成一個java.sql.Date。如果它是VARCHAR並且您知道該代碼(例如2012-11-20),那麼下面的代碼片段可能會有用。 – nikkatsa

回答

8

您不應該解析來自SQL查詢的日期。他們應該回來作爲日期或時間戳實例。向我們顯示您的查詢。

您prabably有java.sql.Date情況下回來了,但你用一個空字符串連接起來將它們轉換爲字符串:

obj[7] + "" 

只是做

Date createdDate = (Date) obj[7]; 
+0

是的,抱歉只是意識到它..刪除了評論+1 :) – PermGenError

+0

@JB Nizet亞那工作,我不知道沒有嘗試,謝謝:) –

相關問題