我已经写java应用程序在我的机器和它的工作完全使用数据库设置,但是,当我上安装的站点,它的打击,因为该数据库是略有不同。

所以我在写作的过程中,一些代码,以核实是:

  • A:我已经有了数据库的详细信息正确

  • B:该数据库中有所有表我期待与他们有权列。

我已经有了一下但是我没有想法从哪里开始与B的任何建议?

目标数据库是用于当前的客户是Oracle,但该程序可以被配置到SQL服务器上运行。所以一般解决方法将可以理解的,但是不nessisary因为我敢肯定我可以弄清楚如何做到。

有帮助吗?

解决方案

你会想要查询的信息的数据库,这里是一些例子对于Oracle,每一个平台,我认识到的具有类似的东西。

http://www.alberton.info/oracle_meta_info.html

其他提示

你可能可以使用一个数据库,移徙工具,如LiquiBase为这个--大多数的这些工具具有一些办法的检查的数据库。我没有第一手经验使用它,所以它是个猜测。

我用 DbUnit 测试数据库。这是一个Java基础的解决方案,整合好 Junit.它是能够使用它几乎没有Java。我还没有用完全相同的情况如你所描述的,但应当足够接近的工作。

最通用的解决办法是执行查询的有选择的条款具有预期coulmns和从条款具有表名,在试图抓住块。你可以把其中的条款为1=2因此,如不获取任何数据。如果查询执行而不扔异常然后你必须得预期表和列。

稍有不同的一块可能更好地处理通过编写脚本建立的数据库放在第一位。一个自动化过程中给你一个更好的机会,使两个完全相同。

另一点值得做的是,你尽量减少风险,通过使你devl和生产的环境是相同的-同一个数据库模式和供应商。改变的情况下,使两个不同的。

最后,你不说什么是"轻微"不同,但有时这是不可避免的(例如Oracle使用的序列,SQL服务器使用身份).也许休眠可以帮你换供应商之间的更可靠。它摘要的详细信息,在这样一种方式,改变数据库可能意味着修改一个单一的价值在于配置文件。

什么你需要有基本的单元测试你的数据库。"列必须存在,名为FOOBAR的类型必须整数。没有外国的钥匙可能存在等等。"

这是可行的,与普通的JUnit和JDBC(请表为其元数据),作为您可能想要确保你是绝对肯定正在做什么这可能是困难时,例如使用dbUnit.

你可以检查是否存在表,列、意见等。使用这些表中Oracle

USER_TABLES USER_VIEWS USER_PROCEDURE

(或者对于一切) USER_OBJECTS在OBJECT_TYPE='??'

继续下去...USER_TAB_COLS表列

关于 K

我用 MigrateDB 这一点。它可以让你建立的查询做的事情一样检查是否存在给予表,列、行索引等。对于给定的数据库,并使用这些作为"测试"。 如果一个测试失败,它会触发一个"行动"(这只是另外的查询,知道如何补救办法的问题。)

MigrateDB支持多个数据库平台(你可以指定的"检查表存在的查询"对每个平台,例如),完全配置的试验(你可以让你自己起),配有相当完整的Oracle测试,并且可以运行中的"仅审核"模式,这样,它只是告诉你什么差异。

这是一个好的、可靠的解决方案。

如果你使用普通JDBC,你应该尝试利用这种方法: DatabaseMetadata.getTables 和其他类似方法提供的元数据类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top