2013-07-15 48 views
1

我想使用DBUnit從AS400導出數據並將其導入到HSQLDB數據庫以進行JUnit測試,但是,數據類型信息似乎沒有導出/導入。一切似乎都以CDATA的形式出口(因此將被導入)。有人能告訴我在哪裏可以找到答案嗎?在DBUnit中導出/導入數據類型?

我已經成功地建立和運行的一個例子:

public static void main(String[] args) throws Exception 
{ 
    // database connection 
    Class driverClass = Class.forName("com.ibm.as400.access.AS400JDBCDriver"); 
    Connection jdbcConnection = DriverManager.getConnection("jdbc:as400://myserver;libraries=MYLIB", "user", "password"); 
    IDatabaseConnection connection = new DatabaseConnection(jdbcConnection); 

    // partial database export 
    QueryDataSet partialDataSet = new QueryDataSet(connection); 
    partialDataSet.addTable("TABLE1"); 
    partialDataSet.addTable("TABLE2"); 
    FlatXmlDataSet.write(partialDataSet, new FileOutputStream("flatpartial_as400.xml")); 
    FlatDtdDataSet.write(connection.createDataSet(), new FileOutputStream("flatdtd_as400.dtd")); 
    XmlDataSet.write(partialDataSet, new FileOutputStream("partial_as400.xml")); 

這給我,例如,下面的輸出:

<?xml version='1.0' encoding='UTF-8'?> 
<dataset> 
    <TABLE1/> 
    <TABLE2 ADDRESS_ID="1" ADDRESS_TYPE="1" ADDRESS_DESCRIPTION="Billing Address   "/> 
    <TABLE2 ADDRESS_ID="2" ADDRESS_TYPE="2" ADDRESS_DESCRIPTION="Delivery Address   "/> 
    <TABLE2 ADDRESS_ID="3" ADDRESS_TYPE="3" ADDRESS_DESCRIPTION="Owner Address   "/> 
    <TABLE2 ADDRESS_ID="4" ADDRESS_TYPE="4" ADDRESS_DESCRIPTION="Owner Previous Address "/> 
    <TABLE2 ADDRESS_ID="5" ADDRESS_TYPE="5" ADDRESS_DESCRIPTION="Store Address   "/> 
</dataset> 

這裏是產生的DTD片段:

<!ELEMENT TABLE2 EMPTY> 
<!ATTLIST TABLE2 
    ADDRESS_ID CDATA #REQUIRED 
    ADDRESS_TYPE CDATA #REQUIRED 
    ADDRES_DESCRIPTION CDATA #REQUIRED 
> 

第一個字段應該是DECIMAL(10,0),但它是CDATA。從數據完整性的角度來看,這顯然是一個問題。在調試器中,我可以看到類型信息使其進入DBUnit包(ADDRESS_ID字段在代碼內部爲DECIMAL)。但是,該信息並未將其寫入文件的XML DTD中。

任何幫助表示讚賞...

回答

2

也許這將幫助: 您要導入表Generete DTD文件

private static void generateDTD(String fileName,IDatabaseConnection connection, 
     String[] tablesToExport) throws IOException, DataSetException, 
     SQLException, FileNotFoundException { 
    FlatDtdDataSet.write(connection.createDataSet(tablesToExport), new FileOutputStream(fileName)); 
} 

然後設置這建設者

FlatXmlDataSetBuilder builder = new FlatXmlDataSetBuilder(); 
     builder.setMetaDataSetFromDtd(new FileInputStream(schemaFile)); 
+0

怎麼辦你用建設者寫什麼? –