2013-02-18 34 views
17

पर एसआरएल ऐरे से एसआर के लिए एक परिणाम सेट को कनवर्ट करें मैं अपने पोस्टग्रेएसक्यूएल डेटाबेस में information_schema.columns तालिका से पूछताछ कर रहा हूं। तालिका नाम का उपयोग करके, परिणाम सेट सभी कॉलम नाम, प्रकार, और यह शून्य है (प्राथमिक कुंजी, 'आईडी' को छोड़कर) पाता है। इस क्वेरी इस्तेमाल किया जा रहा है:स्ट्रिंग्स

SELECT column_name, is_nullable,data_type FROM information_schema.columns 
WHERE lower(table_name) = lower('TABLE1') AND column_name != 'id' 
ORDER BY ordinal_position; 

मैं इन परिणामों से प्रत्येक के लिए एक स्ट्रिंग सरणी है और मैं ResultSet विधि getArray(String columnLabel) का उपयोग करने के परिणामों के माध्यम से पाशन से बचने के लिए कोशिश कर रहा हूँ। मैं स्ट्रिंग सरणियों में लौटे सरणी स्टोर करने के लिए है, लेकिन प्राप्त एक प्रकार मेल नहीं खाता त्रुटि

Type mismatch: cannot convert from Array to String[] 

वहाँ एक रास्ता एक String [] में बदलने या SQL सरणी वस्तु टाइपकास्ट करने के लिए है करना चाहते हैं?

प्रासंगिक कोड:

String[] columnName, type, nullable; 

//Get Field Names, Type, & Nullability 
String query = "SELECT column_name, is_nullable,data_type FROM information_schema.columns " 
     + "WHERE lower(table_name) = lower('"+tableName+"') AND column_name != 'id' " 
     + "ORDER BY ordinal_position"; 

try{ 
    ResultSet rs = Query.executeQueryWithRS(c, query); 
    columnName = rs.getArray(rs.getArray("column_name")); 
    type = rs.getArray("data_type"); 
    nullable = rs.getArray("is_nullable"); 
}catch (Exception e) { 
    e.printStackTrace(); 
} 

उत्तर

30

उपयोग:

Array a = rs.getArray("is_nullable"); 
String[] nullable = (String[])a.getArray(); 

के रूप में समझाया here

Array एसक्यूएल प्रकार, getArray() जावा सरणी के लिए कास्ट करने के लिए एक वस्तु देता है।

+1

धन्यवाद, मैंने 'rs.getArray (" is_nullable ") का उपयोग करने का प्रयास किया था। GetArray()' लेकिन मुझे नहीं लगता कि मैंने इसे टाइपकास्ट किया था। ऐसा लगता है कि मेरी समस्या हल हो गई है। – Matt

3

सरणी सामान्यीकरण वस्तु को

Object[] type; //this is generic can use String[] directly 
    Array rsArray; 

    rsArray = rs.getArray("data_type"); 
    type = (Object [])rsArray.getArray(); 

यह स्ट्रिंग के रूप में पाश का उपयोग करें:

type[i].toString(); 
+0

यह अभी भी एक त्रुटि का कारण बनता है। "_Type विसंगति: ऑरे से ऑब्जेक्ट में परिवर्तित नहीं हो सकता [] _"। मुझे लगता है कि बड़ी समस्या यह है कि परिणामसेट 'getArray' विधि एक [java.sql ऐरे] (http://docs.oracle.com/javase/7/docs/api/java/sql/Array.html) देता है, नहीं java.util.Arrays java.lang ऑब्जेक्ट क्लास के अंतर्गत टाइप करें। यहां [javadoc] है (http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#getArray (java.lang.String)) विधि पर मैं हूं का उपयोग करते हुए। – Matt

+0

@ मैट संपादित और सत्यापित, getArray() ऐरे वापस कर देगा, और Array.getArray() जावा सरणी देता है। – TheWhiteRabbit

+0

सही, यह अब काम करेगा, लेकिन इसे 'toString()' के अनावश्यक उपयोग की आवश्यकता है। किसी ऐसे मामले में जहां परिणामसेट में अज्ञात या विभिन्न प्रकार की वस्तुएं निहित हैं, ऑब्जेक्ट को सामान्यीकृत करना [] अधिक उपयोगी हो सकता है। मेरे मामले में, मुझे केवल स्ट्रिंग की आवश्यकता है। – Matt

0

एक SQL सरणी से एक ArrayList संपत्ति कैसे निर्धारित करें:

Array a = rs.getArray("col"); // smallint[] column 
if (a != null) { 
    yourObject.setListProperty(Arrays.asList((Integer[]) a.getArray())); 
} 
+0

लाइन 3 में यह 'ओ' क्या है? – DerMike

+1

ओ एक संपत्ति सूची वाले ऑब्जेक्ट का एक उदाहरण है प्रकार की सूची yglodt

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