【问题标题】:Populate flatXmlDataSetBuilder SQL-SERVER table name containing '-'填充包含“-”的 flatXmlDataSetBuilder SQL-SERVER 表名
【发布时间】:2013-10-02 03:43:10
【问题描述】:

我尝试使用 flatXmlDataSetBuilder 为我的 junit 测试填充数据库 MS-SQLSERVER。问题是表名包含'-'。

我正在使用的 xml 如下所示:

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  <TABLE-NAME ID="1111" NAME="TEST"/>
</dataset>

代码是:

FlatXmlDataSetBuilder flatXmlDataSetBuilder = new FlatXmlDataSetBuilder();
            flatXmlDataSetBuilder.setColumnSensing(true);
            dataset = flatXmlDataSetBuilder.build(Thread.currentThread()
                    .getContextClassLoader()
                    .getResourceAsStream("populate.xml"));

我得到错误“com.microsoft.sqlserver.jdbc.SQLServerException:'-' 附近的语法不正确。”

我知道我必须用 [TABLE-NAME] 这样的括号括起来,但在这种情况下,我会从 xml 中得到一个错误:

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  <[TABLE-NAME] ID="1111" NAME="TEST"/>
</dataset>

org.dbunit.dataset.DataSetException:第 3 行:元素的内容必须由格式良好的字符数据或标记组成。

知道怎么解决吗?

谢谢

【问题讨论】:

    标签: java sql-server xml populate dbunit


    【解决方案1】:

    您也可以使用 XmlDataSet 代替 FlatXmlDataSet 来避免“-”字符的问题。下面你可以看到一个 dbunit 完整的例子:

    package yourPackage;
    
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import org.dbunit.DBTestCase;
    import org.dbunit.PropertiesBasedJdbcDatabaseTester;
    import org.dbunit.database.DatabaseConnection;
    import org.dbunit.database.IDatabaseConnection;
    import org.dbunit.database.QueryDataSet;
    import org.dbunit.dataset.xml.XmlDataSet;
    import org.junit.Test;
    import org.dbunit.dataset.IDataSet;
    import org.dbunit.dataset.xml.FlatXmlDataSet;
    
    public class TestDBUnitDummy extends DBTestCase
    {
    
        public TestDBUnitDummy( String name ) throws Exception
        {
            super( name );
            System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "com.microsoft.sqlserver.jdbc.SQLServerDriver" );
            System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "jdbc:sqlserver://MyServer;databaseName=MyDatabase" );
            System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "sa" );
            System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "" );
        }
    
        public static void Export() throws Exception
        {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Connection jdbcConnection = DriverManager.getConnection("jdbc:sqlserver://MySourceServer;databaseName=MyDatabase", "sa", "");
            IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);
    
            QueryDataSet partialDataSet = new QueryDataSet(connection);
            partialDataSet.addTable("TABLE-NAME", "SELECT * FROM [TABLE-NAME]");
            XmlDataSet.write(partialDataSet, new FileOutputStream("table.xml"));
            FlatXmlDataSet.write(partialDataSet, new FileOutputStream("table_flat.xml"));
        }
    
        protected void setUpDatabaseConfig( DatabaseConfig config )
        {
        config.setProperty(DatabaseConfig.PROPERTY_ESCAPE_PATTERN , "[?]");
        }
    
        protected IDataSet getDataSet() throws Exception
        {
            Export();
            return new XmlDataSet( new FileInputStream( "table.xml" ) );
        }
    
    
        @Test
        public void test_001()
        {
            assertEquals( "Dummy test", true, true );       
        }
    
    }
    

    [TABLE-NAME] 是使用 SQL 使用以下命令创建的:

    CREATE TABLE [TABLE-NAME](
        [ID] [int] NULL,
        [DESCRIPTION] [nvarchar](50) NULL
    ) ON [PRIMARY]
    GO
    INSERT INTO [TABLE-NAME] VALUES (1,'ONE')
    INSERT INTO [TABLE-NAME] VALUES (2,'TWO')
    INSERT INTO [TABLE-NAME] VALUES (3,'THREE')
    GO
    

    XmlDataSet 如下所示:

    <?xml version='1.0' encoding='UTF-8'?>
    <dataset>
      <table name="TABLE-NAME">
        <column>ID</column>
        <column>DESCRIPTION</column>
        <row>
         <value>1</value>
         <value>ONE</value>
        </row>
        <row>
         <value>2</value>
         <value>TWO</value>
        </row>
        <row>
         <value>3</value>
         <value>THREE</value>
        </row>
      </table>
    </dataset>
    

    FlatXmlDataSet 看起来像这样:

    <?xml version='1.0' encoding='UTF-8'?>
    <dataset>
      <[TABLE-NAME] ID="1" DESCRIPTION="ONE"/>
      <[TABLE-NAME] ID="2" DESCRIPTION="TWO"/>
      <[TABLE-NAME] ID="3" DESCRIPTION="THREE"/>
    </dataset>
    

    由于“-”字符,此 xml 文件格式不正确。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多