2011-01-28 97 views
2

我正在测试使用SQL Server数据库的应用程序。出于测试目的,我非常希望能够使用HSQL等内存数据库。实际上我的测试正在运行,但我还有一个突出的难点 - 我很难生成一个可用于构建HSQL数据库的SQL脚本。由于这个系统还在开发中,数据库的更改可能会发生,所以我不想花时间手动更新SQL脚本。创建有效的SQL脚本以生成SQL Server数据库

在SQL Server Management Studio中,我可以生成一个脚本来构建该数据库。但是,该脚本包含许多SQL Server特有的“东西”。因此,我不能将该脚本转移到HSQL并执行。相反,我需要花费大量的时间来排除那些在HSQL中不起作用的东西。

一位同事建议使用PowerBuilder来生成脚本,虽然它生成的脚本比较干净,但它仍然不会在HSQL中按原样运行。

任何人都可以提出一种方法(工具,过程等),我可以用它来指向SQL Server数据库并生成一个脚本,它将在HSQL中构建完全相同的数据库?

谢谢!

+1

假设您可以通过ODBC连接到HSQL,可以创建一个[SQL Server链接服务器实例](http://msdn.microsoft.com/zh-cn/library/aa213778%28SQL.80%29.aspx) ,并将表格和数据转储到HSQL中。然后应该有HSQL工具根据现有的数据库/模式生成脚本。 – 2011-01-28 16:48:00

回答

2

假设您使用Hibernate,您可以在您的测试用例中配置Hibernate,以在创建sessionFactory时创建表。

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="mappingResources"> 
     <list> 
      <value>...hbm file...</value> 
      ... 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop> 
      ... 
      <prop key="hibernate.hbm2ddl.auto">create</prop> 
     </props> 
    </property> 
</bean> 

唯一的缺点,这种方法是,如果你的HBM文件不具有匹配的设置你的物理SQL Server数据库(例如,你忽略你的HBM文件一定的约束或列),然后创建HSQL中的表格将会有所不同。

2

正如limc给出的答案的后续,这是我所能做的。

我使用Spring和Hibernate所以我能够把我的春节,数据配置文件,并把它变成这样:

<bean id="sessionFactory" name="sessionFactory" 
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
<property name="dataSource" ref="dataSource" /> 
<property name="mappingResources"> 
    <list> 
    ...hbm files... 
    </list> 
</property> 
<property name="hibernateProperties"> 
<props> 
    <prop key="hibernate.dialect">${db.dialect}</prop> 
    <prop key="hibernate.show_sql">false</prop> 
    <prop key="hibernate.format_sql">true</prop> 
    <prop key="hibernate.use_sql_comments">false</prop> 
    <prop key="hibernate.hbm2ddl.auto">${ddl.create}</prop> 
</props> 
</property> 
</bean> 

随着到位,我能propertyConfigurer配置填写占位符,看起来像这样:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop.xsd"> 

    <bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="location"> 
      <value>classpath:test-messages.properties</value> 
     </property> 
    </bean> 

</beans> 

我有我的测试这些文件之一,多了一个我的生产代码。上面显示的一个是我的测试版本,并引用文件test-messages.properties,看起来像这样:

db.dialect=org.hibernate.dialect.HSQLDialect 
ddl.create=create 

这实际工作非常漂亮,我可以利用占位符重用几乎所有的我的生产配置文件和propertyConfigurer构造。我的测试环境中唯一需要的额外文件是propertyConfigurer配置文件和它们指向的属性文件。

谢谢,limc!

另外,我确实看到limc提到的问题。该系统被设计为部署用于连接到生产环境中的SQL Server数据库,该数据库不会通过hbm2ddl创建。所以,如果我的HBM文件中有错误,我的测试可能都会正常工作,而我仍然可能会遇到生产故障。

一方面,我对此非常不满,但另一方面,我实际上可以以完全独立的方式对数据库运行测试用例。就这一解决方案而言,有人可以从源代码管理中检查此项目,并立即运行测试用例,而无需执行任何类型的数据库设置。我也喜欢那个。不幸的是,我还没有找到一个真正有两种方法的好方法。

+0

所有补充+1。 :) – limc 2011-02-01 01:42:22

相关问题