2008-10-31 7 views
23

मुझे तीन डेटाबेस (ओरेकल, सिबेस, एमएस-सर्वर) के लिए संग्रहित प्रक्रियाओं/कार्यों को लौटने वाले परिणामों को संभालने की आवश्यकता है। प्रक्रियाएं/कार्य आम तौर पर समान होते हैं लेकिन ओरेकल में कॉल थोड़ा अलग होता है।किसी दिए गए जेडीबीसी कनेक्शन के लिए डेटाबेस प्रकार कैसे निर्धारित करें?

statement.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR); 
... 
statement.execute(); 
ResultSet rs = (ResultSet)statement.getObject(1); 

JDBC इस संभाल करने के लिए एक सामान्य तरीके प्रदान नहीं करता है, तो मैं डीबीएस के विभिन्न प्रकार के भेद करने के लिए मेरी कोड में की आवश्यकता होगी। मुझे कनेक्शन दिया गया है लेकिन यह निर्धारित करने का सबसे अच्छा तरीका नहीं है कि डीबी ऑरैकल है या नहीं। मैं ड्राइवर नाम का उपयोग कर सकता हूं लेकिन एक क्लीनर तरीका ढूंढूंगा।

उत्तर

40

मुझे संदेह है कि आप डेटाबेस मेटाडेटा क्लास का उपयोग करना चाहते हैं। सबसे अधिक संभावना DatabaseMetaData.getDatabaseProductName पर्याप्त होगा, हालांकि आप getDatabaseProductVersion विधि का उपयोग भी कर सकते हैं यदि आपके पास कोड है जो उस विशेष डेटाबेस के विशेष संस्करण पर निर्भर करता है जिसके साथ आप काम कर रहे हैं।

+8

Microsoft SQL सर्वर "Microsoft SQL सर्वर" उत्पाद नाम के लिए देता है। – OldCurmudgeon

+6

ओरेकल "ओरेकल" – OldCurmudgeon

+9

देता है PostgreSQL देता है "PostgreSQL" –

1

आप org.apache.ddlutils, वर्ग Platformutils उपयोग कर सकते हैं:

databaseName = new PlatformUtils().determineDatabaseType(dataSource) 
संबंधित मुद्दे