内部多使用Oracle和MSSQL的数据库,发现在取值日期时间字段时发生异常。
目前在重写以前的一个项目,当初的开发环境是MyEclipse+Oracle,取值日期字段时没有任何问题。
代码如下:
private Date SignTime; private Date RecordTime; private int Status; String SQL = "SELECT * FROM 【Table】 WHERE No='"+no+"'"; Record rs = Db.use("dbMETA").findFirst(SQL); if(rs!=null) { this.SignTime = rs.getTimestamp("SIGNTIME"); this.RecordTime = rs.getTimestamp("RECORDTIME"); this.Status = rs.getStr("STATUS"); }
老环境中没有任何问题,但在JFinal环境中,rs.getTimestamp("SIGNTIME")就报如下异常:
java.lang.ClassCastException: java.sql.Date cannot be cast to java.sql.Timestamp
因为是项目重写,存在第三方接口调用,故部分涉及到具体时间的时分秒等数值必须保持一致,不能省略。
生产环境数据库中部分数据可能存在类似"2005-3-2"或"2017-2-12 23:22:47",也就是说有完全日期的,也有带时分秒的。如果数据使用getDate()来取值,虽然没有报错,但无法获得时分秒,而采用getTimestamp()来取值,就是上面的错误。
搞了一天没有个头绪,望各位神个援手赐教一下。
项目:JFinal
可以通过指定 date pattern 来输出一个 java.sql.Date 来验证我前面所说
因此,解决这个问题的最简单办法是直接使用 getDate(...)
这里注意一个基本问题:jfinal 是不干预从数据库过来数据的类型的,你碰到的这个 java.sql.Date 是底层 JDBC 转化的结果