2009-10-07 10 views
23

मुझे अभी एहसास हुआ कि डीबीयूनीट स्वयं ही टेबल नहीं बना रहा है (How do I test with DBUnit with plain JDBC and HSQLDB without facing a NoSuchTableException? देखें)।क्या डीबीयूनीट स्वचालित रूप से टेबल बनाने के लिए कोई तरीका है?

क्या डीबीयूनीट डेटासेट या डीटी से स्वचालित रूप से टेबल बनाने के लिए कोई तरीका है?

संपादित करें: HSQLDB की तरह एक में स्मृति डेटाबेस के साधारण परीक्षण के लिए, एक कच्चे दृष्टिकोण स्वचालित रूप से टेबल बनाने के लिए इस्तेमाल किया जा सकता है:

private void createHsqldbTables(IDataSet dataSet, Connection connection) throws DataSetException, SQLException { 
    String[] tableNames = dataSet.getTableNames(); 

    String sql = ""; 
    for (String tableName : tableNames) { 
     ITable table = dataSet.getTable(tableName); 
     ITableMetaData metadata = table.getTableMetaData(); 
     Column[] columns = metadata.getColumns(); 

     sql += "create table " + tableName + "("; 
     boolean first = true; 
     for (Column column : columns) { 
     if (!first) { 
      sql += ", "; 
     } 
     String columnName = column.getColumnName(); 
     String type = resolveType((String) table.getValue(0, columnName)); 
     sql += columnName + " " + type; 
     if (first) { 
      sql += " primary key"; 
      first = false; 
     } 
     } 
     sql += "); "; 
    } 
    PreparedStatement pp = connection.prepareStatement(sql); 
    pp.executeUpdate(); 
} 

private String resolveType(String str) { 
    try { 
    if (new Double(str).toString().equals(str)) { 
     return "double"; 
    } 
    if (new Integer(str).toString().equals(str)) { 
     return "int"; 
    } 
    } catch (Exception e) {} 

    return "varchar"; 
} 

उत्तर

15
नहीं

वास्तव में। जैसा कि आपने उत्तर दिए गए उत्तर के रूप में, dbunit xml फ़ाइलों में डेटा होता है, लेकिन स्तंभ प्रकार नहीं।

और आप वास्तव में ऐसा नहीं करना चाहते हैं; आप टेस्ट कलाकृतियों के साथ अपने डेटाबेस को प्रदूषित करने का जोखिम उठाते हैं, जिससे संभावना है कि उत्पादन कोड परीक्षण प्रक्रिया द्वारा बनाई गई तालिकाओं पर गलती से भरोसा करेगा।

ऐसा करने की आवश्यकता दृढ़ता से सुझाव देती है कि आपके पास डीबी निर्माण और रखरखाव प्रक्रिया पर्याप्त रूप से परिभाषित और लिपिबद्ध नहीं है।

3

नहीं, आप के साथ एक SQL स्क्रिप्ट निष्पादित करने के लिए होगा तालिका परिभाषाएं

जैसा कि मैंने अन्य धागे में पोस्ट किया है, एक्सएमएल में तालिका बनाने के लिए पर्याप्त डेटा नहीं है। मुझे लगता है कि आप मूल्यों को पार्स करने के लिए कुछ डरावना कर सकते हैं ताकि यह निर्धारित करने के लिए कि इसमें क्या मूल्य शामिल हैं लेकिन यह काफी भंगुर होगा। यह एनबर्नेट से अलग है कि एनोटेटेड कक्षाओं में डेटाबेस की स्थिति के बारे में बहुत सारी जानकारी होती है। जावा प्रकार के फ़ील्ड में एनोटेशन और भाग में भाग है।

http://www.dbunit.org/faq.html#ddl

1

यदि आप जेपीए का उपयोग कर रहे हैं तो आप आमतौर पर अपने जेपीए प्रदाता को कॉन्फ़िगर कर सकते हैं ताकि यह प्रारंभिकरण पर तालिकाओं को बना/अपडेट कर सके।

उदा। हाइबरनेट के लिए, संपत्ति hibernate.hbm2ddl.auto निर्दिष्ट करें और इसके मान को बनाने के लिए सेट करें (परीक्षण के लिए ठीक होना चाहिए)।

यह भी देखें: Hibernate Documentation, Chapter 3 Configuration

हालांकि, यह सुनिश्चित करें कि जेपीए प्रदाता डीबी उपयोग करने वाले पहले है;)

0

मैं बस में झंकार करना चाहता था और कहते हैं कि यह मेरे लिए काफी मददगार था। मुझे ओरेकल डेटाबेस से कनेक्ट करने और इसे एक एक्सएमएल फ़ाइल में निर्यात करने की आवश्यकता है, फिर इसे एक परीक्षण एचएसक्यूएल डेटाबेस के रूप में आयात करें और इसे हाइबरनेट के साथ एक्सेस करें। मैं कर रहा

DatabaseOperation.CLEAN_INSERT.execute(conn, dataset);. 

सावधानी का एक शब्द है, हालांकि इससे पहले कि टेबल बनाने के लिए इस कोड का इस्तेमाल किया, इस कोड प्राथमिक कुंजी के रूप में प्रत्येक तालिका के पहले कॉलम, इसलिए सावधान यदि आप रिश्ते तालिकाओं का उपयोग के रूप में आप एक मिल सकता है हो सकता है सेट आयात पर "प्राथमिक कुंजी बाधा उल्लंघन"। कोड स्निपेट के लिए धन्यवाद!

+0

यह किसी भी टेबल बना नहीं करता है, कोड सिर्फ प्रदान की डाटासेट से डेटा सम्मिलित करता है। – tak3shi

3

वसंत बूट/वसंत जेडीबीसी सादे जेडीबीसी के साथ एक डेटाबेस शुरू कर सकता है।

वसंत जेडीबीसी में डेटासोर्स प्रारंभकर्ता सुविधा है।स्प्रिंग बूट को डिफ़ॉल्ट रूप से सक्षम करता है और मानक स्थानों से एसक्यूएल लोड करता है schema.sql और data.sql (क्लासपाथ की जड़ में)। इसके अलावा स्प्रिंग बूट schema-${platform}.sql और data-${platform}.sql फ़ाइलों को लोड करें (यदि वर्तमान), जहां प्लेटफ़ॉर्म spring.datasource.platform, उदा। आप इसे डेटाबेस (hsqldb, h2, oracle, mysql, postgresql इत्यादि) के विक्रेता नाम पर सेट करना चुन सकते हैं।

https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html

संबंधित मुद्दे

 संबंधित मुद्दे