2011-01-28 95 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

相關問題