मेरी समस्या का मूल यह है कि मेरे पास एक तरीका है जो जेडीबीसी प्रश्नों को संभालता है और क्वेरी के बाद सभी कनेक्शन जारी करता है। एक "परिणामसेट" कॉलिंग विधि पर वापस भेज दिया जाता है।क्लासकास्ट अपवाद: java.lang.Object java.lang.Integer
मुझे पता चला है कि मैं परिणामसेट को सीधे कॉलिंग विधि पर पास नहीं कर सकता, क्योंकि परिणामसेट बंद होने के साथ, इसका उपयोग करने के किसी भी प्रयास को पहले से ही बंद त्रुटि मिलती है।
तो संसाधनों को बंद करने से पहले, मैं परिणामसेट के माध्यम से लूप करता हूं और इसे एक ऐरेलिस्ट में संग्रहीत करता हूं।
क्योंकि विधि किसी भी प्रश्न को संभालती है, मुझे नहीं पता कि किस तरह के प्रकार लौटाए जा रहे हैं। इसलिए ArrayList जेनेरिक एस स्टोर करता है।
यह एक तालिका में एक फ़ील्ड को छोड़कर काम करता है .. एक डेटाबेस में, यह एक पूर्णांक [] फ़ील्ड है।
जो मैं वहां से बाहर निकलता हूं वह एक जेडीबीसी 4 एरे ऑब्जेक्ट है, और मेरे पास एररेलिस्ट में स्टोर करने के लिए एक इंटीजर [] को प्राप्त करने का समय है। मुझे इसे इंटीजर होने की आवश्यकता है []।
यह वही है जो मेरे पास है ... यह बहुत निराशाजनक बैंजक्सक्सिंग के बाद है।
// For every row in the ResultSet
while (rs.next()) {
// Initialize a ITILRow for this ResultSet row
ITILRow row = new ITILRow();
// For each column in this row, add that object to the ITILRow
for (int colNum=1; colNum<=numCols; colNum++) {
Object o = rs.getObject(colNum);
// JDBC4Array is a real pain in the butt
ArrayList<Integer> tmpList = new ArrayList<Integer>();
if (o != null) {
if (o.getClass().getSimpleName().endsWith("Array")) {
// At least at this time, these Arrays are all Integer[]
Array a = (Array) o;
Integer[] ints = (Integer[]) a.getArray();
for (Integer i : ints) {
tmpList.add(i);
}
o = tmpList;
}
}
row.add(o);
}
// Add the ITILRow to allRows
allRows.add(row);
}
फिर बुला विधि में, ...
for (ITILRow row : allRows) {
...
ArrayList comps = (ArrayList) row.getObject(5);
Integer[] argh = (Integer[]) ((ArrayList<Integer>) comps).toArray();
...
}
और मैं मिल:
ResultSet के माध्यम से पाशन, इससे पहले कि कनेक्शन बंद कर दिया जाता है, मैं यह करने के
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
सहायता की सराहना की जाएगी। मैंने अपने मस्तिष्क को इस पर एक गाँठ में बांध लिया है।
धन्यवाद,
पवित्र धूम्रपान आपको तेज़ थे। धन्यवाद कि यह किया। वाह! मैं फिर से आगे बढ़ रहा हूँ !! धन्यवाद धन्यवाद धन्यवाद। – Lurk21
मुझे लगता है कि पैरामीटर 'नया इंटीजर [0]' होना चाहिए - आपको वास्तव में पारित वस्तु में किसी भी स्थान की आवश्यकता नहीं है, इसका उपयोग केवल कक्षा की जानकारी प्राप्त करने के लिए किया जाता है, लेकिन आपको इसे तुरंत चालू करना होगा। – AgilePro
@AgilePro: यदि पास सरणी काफी बड़ी है (कम से कम comps.size() तत्व), पारित सरणी भर जाएगी और toArray विधि द्वारा लौटा दी जाएगी। सरणी को काफी बड़ा बनाना उसी प्रकार के अतिरिक्त सरणी को बनाएगा जो बनाएगा। – jarnbjo