Экспонирование набора данных в XML-файл с ошибкой в ​​DBunit - PullRequest
1 голос
/ 26 декабря 2011

Привет всем, я работаю с использованием 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

Ответы [ 3 ]

5 голосов
/ 22 января 2012

Я предполагаю, что в вашей базе данных есть таблица с именем user.Но user является зарезервированным ключевым словом в MSSQL.DBUnit создает такой запрос, как:

SELECT * FROM user;

Но это создает ошибку, которую вы видите.Вместо этого DBUnit должен создать запрос вроде:

SELECT * from [user];

Я думаю, вы могли бы исправить это, используя параметр конфигурации Escape pattern DBUnit.Я сам не пробовал, но что-то вроде этого должно работать:

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

Надеюсь, это поможет!:)

1 голос
/ 01 февраля 2012

Спасибо за вышеуказанное решение.Это фактическое решение.

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"));
    }
}
0 голосов
/ 01 февраля 2012

Если вы хотите экспортировать набор данных, мы можем сделать это

<dbunit driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://localhost:1433;DatabaseName=config1" userid="user" password="passwd$2004" escapePattern="[?]" datatypeFactory="org.dbunit.ext.mssql.MsSqlDataTypeFactory"><br> <compare src="C:/export.xml"/> </dbunit>

...