0

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

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

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

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

谢谢,唐

4

3 回答 3

1

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

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

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

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

于 2009-08-19T20:56:52.760 回答
0

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

您可能必须自己管理插入/更新/删除逻辑......这可以用这个伪代码来概括:

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

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

于 2009-08-19T19:00:57.003 回答
0

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

我对为什么要将主副本保留为文本文件感到困惑 - 为什么不将数据库用作主文件?

于 2009-08-19T18:46:34.693 回答