将数据集表示为xml文件,在DBunit中给出错误

大家好我正在使用dbunit。 我正在尝试将db的datset导出到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.(AbstractResultSetTable.java:110) at org.dbunit.database.ForwardOnlyResultSetTable.(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]; 

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

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

我希望这有帮助! 🙂

感谢上述解决方案。 这是实际的解决方案。

 import java.sql.Connection; import java.sql.DriverManager; import org.dbunit.database.DatabaseConfig; 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://localhost:1433;DatabaseName=def_config","user","passwd$2004"); IDatabaseConnection connection = new DatabaseConnection( jdbcConnection ); connection.getConfig().setProperty(DatabaseConfig.PROPERTY_ESCAPE_PATTERN , "[?]"); // full database export IDataSet fullDataSet = connection.createDataSet(); FlatXmlDataSet.write(fullDataSet, new FileOutputStream("C:/full.xml")); } } 

如果你想导出数据集usnig ant,我们可以这样做