2009-11-23 10 views
7

क्या स्प्रिंग्स SimpleJdbcTemplate का उपयोग कर डेटाबेस में सभी तालिका नामों की सूची प्राप्त करने का कोई तरीका है?वसंत से सभी तालिका नामों की सूची प्राप्त करें SimpleJdbcTemplate

पूछताछ की जा रही डेटाबेस ओरेकल है अगर यह किसी भी तरह से मदद करता है। धन्यवाद।

उत्तर

12

वसंत में DatabaseMetaDataCallback ऑब्जेक्ट है जो डफिमो से जुड़े समाधान के बॉयलर प्लेट पहलुओं में से कुछ का ख्याल रख सकता है। JDBCUtils.extractDatabaseMetaData पर कॉल करते समय आप उस ऑब्जेक्ट को पास कर सकते हैं।

उसी कक्षा को बनाने का एक उदाहरण जिसे आप उन वर्गों के साथ बनाने की कोशिश कर रहे हैं, here पाया जा सकता है। उस लिंक से

नमूना कोड:

कक्षा:

class GetTableNames implements DatabaseMetaDataCallback { 

     public Object processMetaData(DatabaseMetaData dbmd) throws SQLException { 
      ResultSet rs = dbmd.getTables(dbmd.getUserName(), null, null, new String[]{"TABLE"}); 
      ArrayList l = new ArrayList(); 
      while (rs.next()) { 
       l.add(rs.getString(3)); 
      } 
      return l; 
     } 
    } 

उपयोग:

GetTableNames getTableNames = new GetTableNames(); 
try { 
    Object o = JdbcUtils.extractDatabaseMetaData(dataSource, getTableNames); 
    System.out.println(o); 
} catch (MetaDataAccessException e) { 
    System.out.println(e); 
} 
+2

मेरे द्वारा +1 - यह अब तक का सबसे अच्छा जवाब है। अच्छा लगा। – duffymo

4

आप हमेशा कनेक्शन का उपयोग कर java.sql.DatabaseMetaData प्राप्त करने के लिए स्वतंत्र रहते हैं। आपकी मदद करने के लिए SimpleJdbcTemplate में कोई भी विधि नहीं है, लेकिन स्पष्ट रूप से इसकी कोई आवश्यकता नहीं है।

DatabaseMetaData md = c.getMetaData(); 
ResultSet rs = md.getTables(null, null, "%", null); 
while (rs.next()) { 
    System.out.println(rs.getString(3)); 
} 
+0

ऐसा नहीं है कि वसंत पहलू लेनदेन प्रबंधक बातचीत या कुछ और की वजह से महत्वपूर्ण है संभव है। – bmargulies

+1

मुझे नहीं लगता कि इस तरह के केवल पढ़ने के लिए लेनदेन की आवश्यकता है। एकमात्र समस्या यह हो सकती है कि जब आप ऑपरेशन कर रहे हों तो कोई स्कीमा बदलता है जिससे परिणाम अमान्य हो जाता है। यदि ऐसा हो सकता है, तो आपके पास बहुत अधिक समस्याएं हैं। – duffymo

+1

वह लिंक वर्तमान में एक phising साइट – Justin

1

उपयोगकर्ता_TABLES क्वेरी पूछें और आप उन्हें प्राप्त करेंगे।

पहले आकार देखने के लिए, एसक्लप्लस में चारों ओर पोक करें।

+0

मेरे अनुभव में, एप्लिकेशन की "टेबल" अक्सर किसी अन्य स्कीमा में तालिकाओं के समानार्थी होते हैं, इसलिए आपको ALL_TABLES से भी पूछताछ करनी पड़ सकती है। – Dan