使用HQL查询Oracle日期字段,报"Invalid number"

问题描述

如题,Oracle数据库里面有一批记录,现在我想根据其中一个叫:txn_date的字段来查询记录,在Hbm文件中我配置了该HQL,如下所示:<sql-query name="job.getJobByDate"> select {job.*} from Newsletter_Message job where to_char(:dateType,'yyyy-mm-dd hh24:mi') = to_char(:jobDate, 'yyyy-mm-dd hh24:mi') <return alias="job" class="com.newsletter.domain.job.Job" /></sql-query>在DAO方法中我使用了Spring的HibernateTemplate,方法如下:public List<Job> getJobByDate(final Date jobDate, final String dateType) { return (List<Job> getHibernateTemplate().executeFind( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Query query = session.getNamedQuery"job.getJobByDate"); query.setString("dateType", dateType); query.setDate("jobDate",jobDate); return query.list(); } });}Hibernate生成的SQL语句如下select job.TXN_NO as TXN1_5_0_, job.TXN_TYPE as TXN2_5_0_, job.TXN_DATE as TXN3_5_0_, from Newsletter_Message job where to_char(?, 'yyyy-mm-dd hh24:mi') = to_char(?, 'yyyy-mm-dd hh24:mi')每次执行时,总是抛异常,说:org.springframework.dao.DataIntegrityViolationException: Hibernate operation: could not execute query; .....Caused by: java.sql.SQLException: ORA-01722: invalid number我实在不明白为什么会报这个错误,难道Hibernate在set date或者set string之前不会对其进行格式的转换吗?于是我又换了另外一个HQL语句,在代码里面提前将Date格式成String,但还是报错:where to_char(dateType,'yyyy-mm-dd hh24:mi') = :strDate 后来实在没办法了,用了一阴招,代码如下,测试通过,但是觉得这种代码太丑陋了。public List<Job> getJobByDate(final Date jobDate, final String dateType) { return getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session)throws HibernateException { String strDate = DateUtil.convertDateToString(jobDate, "yyyy-MM-dd HH:mm"); Query query = session.createQuery("from Job job where "+ "to_char(" + dateType + ",'yyyy-mm-dd hh24:mi') = '"+ strDate + "'"); return (List<Job>) query.list();} });}不知道各位能否解析一下上面那个报错的原因,谢谢先了!

解决方案

把 query.setDate("jobDate",jobDate); 改成 query.setTimestamp("jobDate",jobDate); 试试
解决方案二:
Date转化成字符串后是Fri May 23 23:21:28 CST 2008 之类的东西,而你的HQL语句是'yyyy-mm-dd hh24:mi'格式的,当然要抛异常啊建议格式化一下date类型的数据,如Date date=new Date();SimpleDateFormat format=new SimpleDateFormat();format.applyPattern("yyyy-MM-dd HH:MM");String temp=format.format(date);

时间: 2024-08-24 19:42:41

使用HQL查询Oracle日期字段,报&amp;quot;Invalid number&amp;quot;的相关文章

oracle 日期函数集合(集中版本)第1/2页_oracle

在oracle数据库的开发中,常因为时间的问题大费周章,所以特地将ORACLE数据的日期函数收藏致此.乃供他日所查也. add_months(d,n) 日期d加n个月 last_day(d) 包含d的月?的最后一天的日期 new_time(d,a,b) a?区的日期和??d在b?区的日期和?? next_day(d,day) 比日期d?,由day指定的周几的日期 sysdate 当前的系?日期和?? greatest(d1,d2,...dn) ?出的日期列表中最后的日期 least(d1,k2,

hql查询报错。。。。实体类问题

问题描述 hql查询报错....实体类问题 hql语句: String hql="from CouponPublishEntity e inner join e.couponpool c where c.owner='"+userId+"' and e.pubid in ("+ids+") "; 报错 [org.jeecgframework.core.common.exception.GlobalExceptionResolver]全局处理异常捕

mybatis 向oracle 采用foearch批量插入,如果包含clob字段报错

问题描述 mybatis 向oracle 采用foearch批量插入,如果包含clob字段报错 mybatis 向oracle 采用foearch批量插入 如下代码: insert into (id,name,clobs) SELECT #{item.id},#{item.name},#{item.clobs} FROM DUAL 报错信息:仅能绑定要插入 LONG 列的 LONG 值 可是如果采用普通的insert into (id,name,clobs) values(#{id},#{nam

asp.net C# 查询数据库中的日期字段类型及查询数据

asp教程.net C# 查询数据库教程中的日期字段类型及查询数据 private void button1_Click(object sender, EventArgs e)   {   SqlConnection conn = new SqlConnection(@"");   //创建数据库连接对象.数据库连接字符串   SqlCommand cmd = conn.CreateCommand();   cmd.CommandText = "select * from t

oracle中字段是date类型,在页面上要显示成&amp;amp;#39;2015-01-14&amp;amp;#39;这样的

问题描述 oracle中字段是date类型,在页面上要显示成'2015-01-14'这样的 查询的时候用了to_char(date,'yyyy-MM-dd'),就报这样的错了 解决方案 可以呀.看看date错了没有 解决方案二: 你用json?如果是的话需要对json序列化时设置时间格式 解决方案三: 在建表的时候就需要进行一个格式化的 解决方案四: 可以在页面上使用格式化标签来显示的嘛 解决方案五: SQL语句是没有问题的,问题可能出现在你的展现层上 解决方案六: 查出来是字符串,转日期..报

orcale表关联查询,关联字段的数据重复了

问题描述 orcale表关联查询,关联字段的数据重复了 select b.idbranchcount(case when b.billmode = '1' then b.accno end) as issueBill from param_bank aaccnomaindata bebankdata cwhere b.accno = c.accno and b.idbranch=a.idbank group by b.idbranch 因为ebankdata表里的accno字段是有重复的,关联查

java 数据库查询Date类型字段 没有了时分秒 全为 00 的解决办法

数据库查询时间没有了时分秒的解决办法        问题出处,公司一个项目中使用动态sql方式查询Oracle数据库,在展示时Date类型字段只展示日期,无时分秒.        分析:        1.众所周知Oralce的日期类型有很多种,Date ,Timestamp等.其中Date类型对用的是java.sql.Date类型,Timestamp对用的是java.sql.Timestamp类型.这两个类型均继承自java.util.Date,其中java.sql.Date是没有时分秒的大家

缓存 数据库 java-java查询oracle数据库问题(菜鸟问题)

问题描述 java查询oracle数据库问题(菜鸟问题) 我从oracle数据库查一张表比如A,大约有1000w条数据,我需要经常用到这张表的一个字段(字段1)做比较查询,所以想把它放到缓存里.我用的是tomcat 我在java查询时直接把查询了这张表A,select 字段1 from A,然后就想直接放到list加入缓存中,但是使用时报错,Java heap space.查询后说是堆栈的问题,我按照网上的方法在tomcat的catalina.bat 文件里加入 set JAVA_OPTS=-X

ibatis查询date类型字段的数据无法转换成json格式

问题描述 ibatis已经获得正确的查询数据并返回至action,在转换成json格式时因为日期参数不匹配而报错.如果不查询带日期的字段就可以成功转换传递给jsp,请问这是该怎么解决?控制台输出的错误信息:action方法: 解决方案