使用spring-test-dbunit转义保留的数据库关键字

时间:2013-05-28 19:50:09

标签: java spring junit dbunit spring-test-dbunit

如何使用Spring-test-dbunit framework转义SQL Server关键字?

在我的@DatabaseSetup("sampleData.xml")文件中,我有一个名为File的表,它是SQL Server中的保留关键字。为了使查询在SQL Server上成功运行,保留关键字需要用方括号([File])封装。

Expoting Dataset to a xml file giving error in DBunit,我看到这可以通过设置模式转义配置在dbunit中完成。使用Spring-test-dbunit时,我不知道在何处或如何使用此配置。

在使用提供的xml提要将测试数据插入数据库时​​,我在何处/如何告诉spring-test-dbunit框架正确转义数据库关键字?

如果您想查看代码,请告诉我应该发布的摘录,我很乐意这样做。

2 个答案:

答案 0 :(得分:0)

我想,这可能会对你有所帮助

public class DatabaseExport
{
    public static void main(String[] args) throws Exception
    {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
        Connection jdbcConn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=def_config","dbuser","dbpasswd");
        IDatabaseConnection iconn = new DatabaseConnection( jdbcConn );
        iconn.getConfig().setProperty(DatabaseConfig.PROPERTY_ESCAPE_PATTERN , "[?]");
        IDataSet fullDataSet = iconn.createDataSet();
        FlatXmlDataSet.write(fullDataSet, new FileOutputStream("X:/fullDataSet.xml"));
    }
}

答案 1 :(得分:0)

要使用spring-test-dbunit执行此操作,您需要按照其文档页面上的“自定义IDatabaseConnections”部分进行操作:https://springtestdbunit.github.io/spring-test-dbunit/

对于Java Config变体(以及作为备份参考),请参阅此StackOverflow问题的答案:Spring Test DBunit Warning

在您的情况下,使用dbUnitDatabaseConfig bean,将escapePattern属性设置为"[?]"。如:

<bean id="dbUnitDatabaseConfig" class="com.github.springtestdbunit.bean.DatabaseConfigBean">
    <property name="escapePattern" value="[?]"/>
</bean>

旁注,如果JPA / Hibernate用于在测试运行时生成单元测试模式,则还需要转义为Hibernate。请参考此答案:https://stackoverflow.com/a/3463189/1034436