小技术总结

一、Oracle数据库操作

      1、问题背景

           由于项目的需要,原始的数据库设计对时间字段的处理是直接以varchar(2)的方式进行存储的,这样在没有特殊需求的时候可能在一些操作上会显得比较方便。由于项目的的扩展,现需要加入时区的概念。数据库的时间字段需要全部改为TimeStamp类型,而历史的数据则需要全部修改为TimeStamp类型。

 

      2、实现思路

           由于涉及的表的数量很大,单一的手动一张张的修改难免出现遗漏的问题,并且时间损耗太高。现给出如下解决方案:首先扫描对应的表空间下的所有字段,凡是列名中包含time的统一记录下来。以表名、字段名的方式保存到内存中,最后输出到excel文件中。生成好excel文件后,根据该文件,读出所有的表名,利用DBUnit的技术,将数据库中对应的表中的数据保存到xml文件中。第三步,扫描所有的xml文件,将对应的字段的值读出,由String类型修改为TimeStamp类型然后重新写入xml文件中;第四步,修改表结构,将原来的varchar字段修改为TimeStamp类型;第五步,将已经修改完成的备份数据(xml文件)重新导入数据库;

 

      3、问题引入

           在进行第五步的操作时,向数据库的表中插入数据时,会出现外键约束的问题。

 

      4、解决方法

           在Oracle中可以对表的外键约束进行启用和禁用的操作。

 

    禁用外键约束
       select 'alter table '||table_name||' disable constraint '||constraint_name||';'

       from user_constraints 

       where constraint_type='R'

 

    启用外键约束
       select 'alter table '||table_name||' enable constraint '||constraint_name||';'

       from user_constraints

       where constraint_type='R'

 

    删除外键约束
       select 'alter table '||table_name||' drop constraint '||constraint_name||';'

       from user_constraints

       where constraint_type='R'

 

     5、为简化调用,将上述实现的代码打成jar包,然后用bat文件调用jar文件。bat文件的格式如下:

          @echo off
             echo ************************
             echo ***  begin to run ******
             java -jar D:/test.jar
             echo ***  run over     ******
             echo *** press any key ******
             pause

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值