您的位置:首页 > 数据库

使用jdbc更新数据时间时如何屏蔽各种数据库的差异性

2016-05-10 17:24 459 查看
当我们要向数据库中写数据时,通常要附加上数据的更新时间,不同的数据库更新时间的方法不同,如何在代码中屏蔽这种差异性呢?

值得注意的问题是:

1、由于代码和数据库可能不在同一台机器上部署,所以要使用数据库的时间

2、为了方便保持不同数据库中更新的时间格式一致(不能将时间字段定义为时间戳类型,是因为不同数据库的时间戳格式不同),将字段定义为varchar类型。

其实,方法很简单,就是调用各自数据库的时间戳函数。

我们可以在BaseDao中定义一个方法,来获取当前数据库的时间戳函数,如下:

public String getTimeStamp() {
String timeStamp = "";
if (isOracle()) {
timeStamp = "to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss.ff3')";
} else if (isDB2()) {
timeStamp = "VARCHAR_FORMAT(current TIMESTAMP,'yyyy-mm-dd hh24:mm:ss.ff3')";
} else if (isMSSQL()) {

} else {

}
return timeStamp;
}


然后,具体Dao中填入时间字段时,可以调用上述方法,如下:

sql.append(" UPDATETIME=" + this.getTimeStamp());


特别需要注意的地方是:不能将该函数的值作为参数赋给相应字段,如下:

params.addValue("UPDATETIME", getTimeStamp());//ERROR

原因是:字段的类型是字符串,该函数的返回值也是字符串,结果即使写入成功,字段的值也是“to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss.ff3')"或者“VARCHAR_FORMAT(current TIMESTAMP,'yyyy-mm-dd hh24:mm:ss.ff3')”等。

效果:

不仅使用的是数据库的本地时间,同时可以按照我们规定的统一格式赋值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: