开发者社区> 问答> 正文

Jfinal from表单中提交的日期是1991-11格式,但是数据库字段类型是Date,getMo

错误内容:

Timestamp format must be yyyy-mm-dd hh����ss[.fffffffff]
我知道是因为传入的值跟TypeConverter里面的timeStampPattern格式不一样导致的 但是咱们Jfinal有没有类似于SpringMvc的转换器..可以灵活的定义日期格式(如1991-11,可以先拼接成1991-11-01 01:01:01在进行转换) 求大神指点..

展开
收起
kun坤 2020-05-29 11:49:33 632 0
1 条回答
写回答
取消 提交回答
  •     最简单的办法是将表字段类型改成 datetime,而不要使用 timestamp。datetime已经将时间精确到秒的级别了,一般是够用了。
       如果应用比较特殊非要保存毫秒精度,一是页面传过来的日期按照格式来:yyyy-mm-dd hh:mm:ss[.fffffffff],如果不按格式来,可以将表单域的name改为另外的名,如xyz,然后 getModel()完事后,再 model.set(name, TimestampKit.toTimestamp(getPara("xyz"))自行转换后再 set 一下即可 ######回复 @jockiller : 感谢支持 jfinal 发展 ^_^######回复 @JFinal : 十分感谢 我再研究一下..祝愿jfinal越来越好######回复 @jockiller : 只需认准java类型为Date,然后找一个合适的oracle字段类型在JDBC规范下对应java 的Date就可以,我记得oracel的DATE 类型是可以对应上的,只不过貌似要设置合适的长度######回复 @jockiller : jfinal 有关java类型与数据库字段类型的互转,完全依赖于JDBC给出的类型,可以看一下 com.jfinal.plugin.activerecrod.TableBuilder中是通过jdbc反射得到的数据表字段对应的java类型。在转换的时候也按照了这个标准来进行######而且 还有一个地方 不是很理解..我的oracle数据库中这个字段是date类型,不是timestamp类型..但是 刚才打打断点clazz却是timestamp,这是为啥?######直接getStr过来自己转一下嘛######那样的话 getModule方法就没用了..######    这里有个更详细的贴子,建议看一下:http://www.oschina.net/question/586193_241111###### getmodel取其他的数据。针对这个一个字段特殊处理。
    没必要和自己较劲。 ######谢谢回答..不过最后通过下面这种方法解决的..######

    引用来自“JFinal”的评论

        最简单的办法是将表字段类型改成 datetime,而不要使用 timestamp。datetime已经将时间精确到秒的级别了,一般是够用了。    如果应用比较特殊非要保存毫秒精度,一是页面传过来的日期按照格式来: yyyy-mm-dd hh:mm:ss[.fffffffff],如果不按格式来,可以将表单域的name改为另外的名,如xyz,然后 getModel()完事后,再 model.set(name, TimestampKit.toTimestamp(getPara("xyz"))自行转换后再 set 一下即可 最后通过改写源码的方式解决的
    else if (clazz == java.sql.Timestamp.class) {                                        
     	String value = s.trim().replaceAll("/", "-");                                    
         if(s.matches("^\\d{4}$")){                                                       
         	value=s+"-01-01 00:00:00";                                                   
         }else if(s.matches("^\\d{4}-\\d{1,2}$")){                                        
         	value=s+"-01 00:00:00";                                                      
         }else if(s.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")){                               
         	value=s+" 00:00:00";                                                         
         }else if(s.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}")){                    
         	value=s+":00:00";                                                            
         }else if(s.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")){          
         	value=s+":00";                                                               
         }else if(s.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")){ 
         	value=s;                                                                     
         }else {                                                                          
         	throw new RuntimeException("timestamp pattern is not find..");               
         }                                                                                
     	result = java.sql.Timestamp.valueOf(value);                                      
    }
    希望JFinal越来越好!! ######已经做过备忘,jfinal 2.1 会让 Timestamp 支持 yyyy-mm-dd 格式的数据######@JFinal : 老大 最后通过这种方式解决的
    2020-05-29 11:49:42
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载