2013-03-09 4 views
5

जानने के बिना कॉलम के मान कैसे प्राप्त करें मैं परिणाम में प्रदर्शित होने वाले फ़ील्ड चुनने वाले उपयोगकर्ता के आधार पर गतिशील रूप से एक क्वेरी बना रहा हूं। समस्या यह है कि जब डेटाबेस से डेटा को पुनर्प्राप्त किया जाता है तो मैं सामान्य प्रकार को पुनर्प्राप्त करने के लिए आमतौर पर getXXX() विधियों का उपयोग करता हूं। लेकिन इस मामले में मुझे नहीं पता कि कॉलम यादृच्छिक रूप से चुने जाने के बाद उचित प्रकार क्या है।कॉलम प्रकार

क्या कोई तरीका है कि मैं डेटा प्रकार XXX निर्दिष्ट किए बिना स्ट्रिंग प्रारूप में डेटा प्राप्त कर सकता हूं? मैं MySQL और Servlets का उपयोग कर रहा हूँ।

+1

'getXXX()। ToString()' काम नहीं है? – deadlock

+1

@deadlock - 'getXXX' विधियों के क्लस्टर के लिए समानार्थी है (getDate, getBytes, getFloat आदि)। यह एक वास्तविक विधि नहीं है और ओपी विशिष्ट प्राप्त विधियों का उपयोग करने के विकल्पों के बारे में पूछ रहा है जब वह अंतर्निहित प्रकार को नहीं जानता है। – Perception

+0

हां यह हो सकता है लेकिन फिर मैं पहले से ही xxx को जानना चाहता हूं ... उस प्रयास को सहेजना चाहता हूं। – Vini

उत्तर

11

आप सामान्य getObject विधि का उपयोग कर सकते हैं:

जावा प्रोग्रामिंग भाषा में एक वस्तु के रूप में इस ResultSet वस्तु की वर्तमान पंक्ति में नामित स्तंभ का मान हो जाता है।

यह विधि जावा ऑब्जेक्ट के रूप में दिए गए कॉलम का मान वापस कर देगी। जेडबीसी विनिर्देश में निर्दिष्ट अंतर्निहित प्रकारों के लिए मैपिंग के बाद जावा ऑब्जेक्ट का प्रकार डिफ़ॉल्ट जावा ऑब्जेक्ट कॉलम के SQL प्रकार से संबंधित प्रकार होगा। यदि मान SQL NULL है, तो ड्राइवर जावा शून्य देता है।

+0

thanx. मुझे लगता है कि यह मदद करेगा। – Vini

+0

क्यों न केवल 'getString() 'अगर वह चाहता है तो स्ट्रिंग है? – Raffaele

0

जहां तक ​​मुझे पता है, आप केवल getString() का उपयोग कर सकते हैं यदि आप जावा स्ट्रिंग ऑब्जेक्ट में परिणाम चाहते हैं। मुझे लगता है कि MySQL ड्राइवर getXXX() के माध्यम से निर्दिष्ट जो भी जावा ऑब्जेक्ट में बाइट स्ट्रीम को deserializing का ख्याल रखता है।

DROP TABLE IF EXISTS thing; 

CREATE TABLE thing (
    a_int int, 
    a_string text, 
    a_date date 
); 

INSERT INTO thing (a_int, a_string, a_date) 
    VALUES ('1234', 'Hello world', CURRENT_DATE()); 

और कोड:

public static void main(String[] args) throws Exception { 
    MysqlDataSource db = new MysqlDataSource(); 
    db.setDatabaseName("test"); 
    Connection conn = db.getConnection("test", "test"); 

    ResultSet res = conn.prepareStatement("SELECT * FROM thing").executeQuery(); 
    res.next(); 
    System.out.println("Get a int as a string: " + res.getString("a_int")); 

} 

यह बस प्रिंट Get a int as a string: 1234 निम्नलिखित init स्क्रिप्ट को देखते हुए। आप जावा int के रूप में a_date कॉलम भी प्राप्त कर सकते हैं, और यह मेरी मशीन पर 2013 में परिवर्तित हो गया है। तो ऐसा लगता है कि बाध्यकारी के बाद होता है ड्राइवर ने सर्वर से बाइट्स की एक अनियमित धारा पुनर्प्राप्त की है। कभी-कभी रूपांतरण विफल रहता है, उदाहरण के लिए यदि आप पर TEXT कॉलम पर आज़माएं।

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