关于Record.getTimestamp()的疑问

内部多使用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

2019-06-02 08:58

java.sql.Date 类型也是可以有时、分、秒的, 是否具有时、分、秒与类型关系不大,只与你的变量中是不是真的有时、分、秒数据有关

可以通过指定 date pattern 来输出一个 java.sql.Date 来验证我前面所说

因此,解决这个问题的最简单办法是直接使用 getDate(...)

这里注意一个基本问题:jfinal 是不干预从数据库过来数据的类型的,你碰到的这个 java.sql.Date 是底层 JDBC 转化的结果

DreamPeter

2019-06-03 01:01

@JFinal 为了赶进度用了个临时的办法解决了。SELECT的时候就用TO_CHAR处理好格式,然后通过字符串转型达到目的,待有时间后面再来细究。

热门反馈

扫码入社