使用jdbc更新数据时间时如何屏蔽各种数据库的差异性
2016-05-10 17:24
459 查看
当我们要向数据库中写数据时,通常要附加上数据的更新时间,不同的数据库更新时间的方法不同,如何在代码中屏蔽这种差异性呢?
值得注意的问题是:
1、由于代码和数据库可能不在同一台机器上部署,所以要使用数据库的时间
2、为了方便保持不同数据库中更新的时间格式一致(不能将时间字段定义为时间戳类型,是因为不同数据库的时间戳格式不同),将字段定义为varchar类型。
其实,方法很简单,就是调用各自数据库的时间戳函数。
我们可以在BaseDao中定义一个方法,来获取当前数据库的时间戳函数,如下:
然后,具体Dao中填入时间字段时,可以调用上述方法,如下:
特别需要注意的地方是:不能将该函数的值作为参数赋给相应字段,如下:
原因是:字段的类型是字符串,该函数的返回值也是字符串,结果即使写入成功,字段的值也是“to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss.ff3')"或者“VARCHAR_FORMAT(current TIMESTAMP,'yyyy-mm-dd hh24:mm:ss.ff3')”等。
效果:
不仅使用的是数据库的本地时间,同时可以按照我们规定的统一格式赋值。
值得注意的问题是:
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')”等。
效果:
不仅使用的是数据库的本地时间,同时可以按照我们规定的统一格式赋值。
相关文章推荐
- 用VS2010创建数据库工程的经验
- Oracle Text是如何支持本地文件的检索
- Linq to sql 实现多条件的动态查询(方法一)
- mysql权限管理(实例)
- MongoDB国内学术研究(部分)
- OrmLite数据库框架的集成及使用
- mysql默认可以跨库,mysqli不可以
- oracle text
- CentOS7 yum安装配置 +redis主从配置
- 使用Entity Framework CodeFirst模式创建新数据库
- Oracle中执行存储过程call和exec区别
- Oracle-PL/SQL使用
- Xtrabackup备份数据库
- 数据仓库中的SQL性能优化 - Hive篇
- Sql server 中暂停与恢复主键自增
- MYSQL 5.7 主从复制 -----GTID说明与限制 原创
- Sqlserver2008相关配置问题
- Oracle权限管理详解(转载)
- Oracle、MYSQL、sql server和DB2分页查询写法
- Oracle、MYSQL、sqlserver和DB2分页查询