【发布时间】:2012-12-02 10:19:35
【问题描述】:
我有一个内部连接表的查询:
List<Object[]> resultList = entityManager.createNativeQuery(SOME QUERY).getResultList();
当我尝试访问 Object[] 的元素时,其中一个是 Date 我尝试这样做:
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"
我将Date 更改为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
有什么建议吗?
【问题讨论】:
-
您不必从 SQL 查询中解析日期 cominf。它们应该作为 Date 或 Timestamp 实例返回。向我们展示您的查询。
-
select project.project_id, project.business_id, project_status_type.project_status_desc, project.create_dtm, project.update_dtm, from project_status_type INNER JOIN project on project_status_type.project_status_type_id = project.project_status_type_id and project.project_id = 12345; -
您存储日期的数据库列类型是什么?是 DateTime 还是 VARCHAR ?如果它是 @JBNizet 提到的 DateTime,您只需将您的对象转换为 java.sql.Date。如果它是 VARCHAR 并且您知道格式(例如 2012-11-20),那么下面的代码 sn-p 可能会有用。
标签: java date datetime inner-join nativequery