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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoxiaoyusheng2012/article/details/51364743

  当我们要向数据库中写数据时,通常要附加上数据的更新时间,不同的数据库更新时间的方法不同,如何在代码中屏蔽这种差异性呢?

值得注意的问题是:

         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')”等。


效果:

        不仅使用的是数据库的本地时间,同时可以按照我们规定的统一格式赋值。


阅读更多 登录后自动展开

扫码向博主提问

demystify

非学,无以致疑;非问,无以广识
去开通我的Chat快问
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页