管理静态数据

时间:2009-08-19 18:29:29

标签: java database dbunit

我正在寻找一种用于管理静态数据的Java(或Groovy)解决方案,即不经常更改的表格中的数据,例如国家/地区列表。

我希望将国家/地区列表保留在文本文件中,并在服务器启动时自动更新表格。我不能简单地删除所有表,然后在文本文件中重新插入数据,因为这会违反关键约束。

DbUnit是一个支持从XML文件将数据加载到DB中的库。它有一个refresh operation 几乎可以满足我的需要。这将插入文件中但不在DB中的任何行,更新数据库中也在文件中的任何行,但它不会删除数据库中但不在文件中的任何行。

有没有人找到解决这个问题的好方法?

谢谢, 唐

3 个答案:

答案 0 :(得分:1)

我之前通过推迟约束来解决这个问题。

通常,在行中插入或更新数据时会检查约束。插入行时,将检查所有约束并接受或拒绝该行。但是,您可以推迟约束检查,直到事务提交为止。见:

http://www.remote-dba.cc/t_garmany_easysql_deferred_constraints.htm

这是特定于供应商的行为。它在oracle中工作,但据我所知,mysql不支持。

答案 1 :(得分:0)

有几个开源的dbms系统,dbunit看起来很合理。

我很困惑为什么要将主副本保存为文本文件 - 为什么不将数据库用作主数据?

答案 2 :(得分:0)

如果您正在使用Hibernate,则可以使用Castor将国家/地区的XML文件(例如)加载到Hibernate模型对象中,然后保留这些对象。

您可能需要自己管理插入/更新/删除逻辑...可以使用此伪代码进行汇总:

  • 通过Castor
  • 将XML加载到Hibernate对象中
  • 对于每个对象:
    • 如果对象位于数据库上,则调用更新
    • 如果对象不在DB上,请调用save
  • 然后为DB上的每条记录
    • 将每条记录与您的对象列表进行比较,如果未在列表中找到则删除

我希望很清楚......我们有一个类似的过程,用户将上传一个XML文件来刷新数据库。