Java 将数据集导出到xml文件时出现DBunit中的错误
大家好,我正在使用dbunit。我正在尝试将数据库的datset导出到xml文件中Java 将数据集导出到xml文件时出现DBunit中的错误,java,dbunit,Java,Dbunit,大家好,我正在使用dbunit。我正在尝试将数据库的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.
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
线程“main”org.dbunit.dataset.DataSetException:com.microsoft.sqlserver.jdbc.SQLServerException:关键字“user”附近的语法不正确。
位于org.dbunit.database.DatabaseDataSet.getTable(DatabaseDataSet.java:323)
位于org.dbunit.database.DatabaseTableIterator.getTable(DatabaseTableIterator.java:89)
位于org.dbunit.dataset.stream.DataSetProducerAdapter.product(DataSetProducerAdapter.java:83)
位于org.dbunit.dataset.xml.FlatXmlWriter.write(FlatXmlWriter.java:124)
在org.dbunit.dataset.xml.FlatXmlDataSet.write(FlatXmlDataSet.java:378)上
在DatabaseExport.main(DatabaseExport.java:23)
原因:com.microsoft.sqlserver.jdbc.SQLServerException:关键字“user”附近的语法不正确。
位于com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)
位于com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1493)
位于com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:775)
位于com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:676)
位于com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
位于com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
位于com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
位于com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
位于com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(SQLServerStatement.java:611)
位于org.dbunit.database.AbstractResultSetTable。(AbstractResultSetTable.java:110)
位于org.dbunit.database.ForwardOnlyResultSetTable。(ForwardOnlyResultSetTable.java:59)
位于org.dbunit.database.CachedResultSetTableFactory.createTable(CachedResultSetTableFactory.java:60)
位于org.dbunit.database.DatabaseDataSet.getTable(DatabaseDataSet.java:319)
... 还有5个
我猜您的数据库中有一个名为user
的表。但是user
是MSSQL中的保留关键字。DBUnit创建一些查询,如:
SELECT * FROM user;
SELECT * from [user];
但这会造成你所看到的错误。相反,DBUnit必须创建如下查询:
SELECT * FROM user;
SELECT * from [user];
我认为可以使用DBUnit的配置设置来解决这个问题。我自己没有尝试过,但类似的方法应该会奏效:
connection.getConfig().setProperty(DatabaseConfig.PROPERTY_ESCAPE_PATTERN , "[?]");
我希望这有帮助!:) 我猜您的数据库中有一个名为
user
的表。但是user
是MSSQL中的保留关键字。DBUnit创建一些查询,如:
SELECT * FROM user;
SELECT * from [user];
但这会造成你所看到的错误。相反,DBUnit必须创建如下查询:
SELECT * FROM user;
SELECT * from [user];
我认为可以使用DBUnit的配置设置来解决这个问题。我自己没有尝试过,但类似的方法应该会奏效:
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"));
}
}
感谢以上解决方案。这才是真正的解决办法
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,我们可以这样做
如果您想导出数据集usnig ant,我们可以这样做
请在此处提供full.xml。请在此处提供full.xml。