您的位置:程序门 -> java -> j2ee / ejb / jms



万分紧急!!!!hibernate中的string转化成datetime问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


万分紧急!!!!hibernate中的string转化成datetime问题
发表于:2007-01-25 15:26:49 楼主
目前项目中采用hibernate+spring+struts,查询语句中有这样一个问题,就是我的字段是datetime的,界面输入的查询条件为类似“2007-01-01   08:00“这种时间条件,不加这个查询条件是没有错的,可是如果sql语句加上这句,就会出错,说varchar转到datatime错误,很郁闷的是打出的sql语句放到查询分析器中执行一点问题没有,正常查出结果,而如果我把条件改为”2007-01-01”即只剩下日期,也不会抱错,下面是我的dao源码:
query   query   =   session.createsqlquery(sql+querysql)
.addscalar( "bugid ",hibernate.string)
.addscalar( "jctname ",hibernate.string)
.addscalar( "stationname ",hibernate.string)
.addscalar( "bugtype ",hibernate.string)
.addscalar( "occurdate ",hibernate.timestamp)
.addscalar( "buglength ",hibernate.big_decimal)
.addscalar( "resolveflag ",hibernate.string);

return   query.list();


查询条件就是occurdate这个字段


业务层对应:

if(!runinfoform.getbugtimefrom().equals( " ")){

      if   (!runinfoform.getbugtimefrom().trim().equals( " "))   {

          querysql.append( "   and       sar_stationbug.occurdate> =   ' "+runinfoform.getbugtimefrom()+ ":00 "+ " ' ");  
   
  }
}
发表于:2007-01-25 15:51:061楼 得分:0
首先要看数据库中的occurdate字段是什么类型的,如果是字符串型的(这样不规范,但有很多人这样做),就要用字符串来比较。如果是datetime型的,就需要转换一下在比较,比如oracle中有to_date( "2007-01-01   08:00 ")   ,你可以这样写sql:
querysql.append( "   and   sar_stationbug.occurdate> =   to_date( ' "+runinfoform.getbugtimefrom()+ ":00 "+ " ') ");
to_date的具体用法忘记了,你自己查一下吧。
发表于:2007-01-25 15:59:062楼 得分:0
数据库中的occurdate字段是datetime类型的,   数据库是sql   server,我用convert转化了,也不管用,个人感觉不是数据库的错,感觉是hibernate转化时的错误
发表于:2007-01-25 16:07:213楼 得分:0
你的convert贴出来看看
发表于:2007-01-25 16:51:584楼 得分:0
将映身字段的类型改为type= "java.sql.date "试试。
发表于:2007-01-26 00:43:495楼 得分:0
用to_date
先从数据库里把数据导出insert形式来看看,仿照写就行了
发表于:2007-01-26 17:05:496楼 得分:0
jf!!!!


快速检索

最新资讯
热门点击