java - 将数据集导出到 XML 文件,在 DBunit 中出现错误

标签 java dbunit

大家好,我正在使用 dbunit。我正在尝试将数据库的数据集导出到 xml 文件中。

import java.sql.Connection;
import java.sql.DriverManager;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import java.io.FileOutputStream;

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 jdbcConnection = DriverManager.getConnection("jdbc:sqlserver://172.26.37.113:1433;DatabaseName=def_config","sqladmin_","halloween$2004");
        IDatabaseConnection connection = new DatabaseConnection( jdbcConnection );
       // full database export
        IDataSet fullDataSet = connection.createDataSet();
        FlatXmlDataSet.write(fullDataSet, new FileOutputStream("full.xml"));

    }
}

但是它给出了这样的错误:

Exception in thread "main" org.dbunit.dataset.DataSetException: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near the keyword 'user'.
    at org.dbunit.database.DatabaseDataSet.getTable(DatabaseDataSet.java:323)
    at org.dbunit.database.DatabaseTableIterator.getTable(DatabaseTableIterator.java:89)
    at org.dbunit.dataset.stream.DataSetProducerAdapter.produce(DataSetProducerAdapter.java:83)
    at org.dbunit.dataset.xml.FlatXmlWriter.write(FlatXmlWriter.java:124)
    at org.dbunit.dataset.xml.FlatXmlDataSet.write(FlatXmlDataSet.java:378)
    at DatabaseExport.main(DatabaseExport.java:23)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near the keyword 'user'.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1493)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:775)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:676)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(SQLServerStatement.java:611)
    at org.dbunit.database.AbstractResultSetTable.<init>(AbstractResultSetTable.java:110)
    at org.dbunit.database.ForwardOnlyResultSetTable.<init>(ForwardOnlyResultSetTable.java:59)
    at org.dbunit.database.CachedResultSetTableFactory.createTable(CachedResultSetTableFactory.java:60)
    at org.dbunit.database.DatabaseDataSet.getTable(DatabaseDataSet.java:319)
    ... 5 more

最佳答案

我的猜测是您的数据库中有一个名为 user 的表。但是 user 是 MSSQL 中的保留关键字。 DBUnit 创建一些查询,如:

SELECT * FROM user;

但这会产生您所看到的错误。相反,DBUnit 必须创建如下查询:

SELECT * from [user];

我想你可以使用 Escape pattern 来解决这个问题DBUnit 的配置设置。我自己没有尝试过,但这样的事情应该可行:

connection.getConfig().setProperty(DatabaseConfig.PROPERTY_ESCAPE_PATTERN , "[?]");

希望对您有所帮助! :)

关于java - 将数据集导出到 XML 文件,在 DBunit 中出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8633372/

相关文章:

java - 理解 Spring 事务——当一个事务方法调用另一个事务方法时会发生什么?

java - 如何以编程方式设置 Spring log4j 属性文件路径

java - DBUnit 在 H2 表中插入时间戳默认值解析错误

java - 该对象已在集成测试中关闭

maven-2 - 如何在 dbunit-maven-plugin 中处理多个 src 文件

java - 为什么我的表格无法在我的卡中滚动?

java - 下载多个 JSON 数组 Android

java - 从 Spring Boot 应用程序获取 pod 名称和 ip

java - JUnit 测试之间的相同 hibernate session 导致问题

java - Spring未初始化bean(dbunit);我错过了什么?