2012-10-08 9 views
5

मैं एक जेटीबल लिखने की कोशिश कर रहा हूं जो एक परिणामसेट से डेटा लेता है और परिणामस्वरूप उचित कॉलम नाम और पंक्ति डेटा मानों के साथ एक गतिशील आकार वाली तालिका बनाने के लिए इसका उपयोग करता है लेकिन मुझे गतिशील रूप से मेरे लिए कॉलम नाम प्राप्त करने के लिए जेडीबीसी नहीं मिल सकती है।सरल getColumnName (0) कॉल फेंकता है अमान्य कॉलम अनुक्रमणिका: getValidColumnIndex

मुझे पता है कि मेरा चयन कथन अच्छा है! मैं अपने परिणाम प्रिंटर क्लास के साथ परिणामों को आसानी से प्रिंट कर सकता हूं, लेकिन मुझे कुछ कारणों से कॉलम नाम नहीं मिल रहे हैं।

कोड: http://pastebin.com/SSNdCkNu

उत्पादन:

Connected to DB! 
SNUM, SNAME, STATUS, CITY, SUPPLIERS_ID_SEQ // printed by static Suppliers class 
Columns: 5 // result set shows there are 5 valid columns as expected 
Exception in thread "main" java.sql.SQLException: Invalid column index: getValidColumnIndex 
at oracle.jdbc.driver.OracleResultSetMetaData.getValidColumnIndex(OracleResultSetMetaData.java:138) 
at oracle.jdbc.driver.OracleResultSetMetaData.getColumnName(OracleResultSetMetaData.java:306) 
at Main.main(Main.java:15) 

उत्तर

13

JDBC स्तंभ अनुक्रमणिका 1 से शुरू करते हैं और नहीं 0. जहां तक ​​संभव हो, यह बेहतर स्तंभ नाम का उपयोग करते हुए कठिन निर्भरता से बचने के लिए डेटा पुनः प्राप्त करने के लिए है परिणामों में कॉलम के क्रम पर।

+0

वाह बहुत हास्यास्पद है। या शायद मैं सिर्फ शर्मिंदा हूं क्योंकि त्रुटि इतनी सरल थी। किसी भी तरह से मैंने प्रोग्रामिक रूप से कॉलम की संख्या प्राप्त करने का अनुमान लगाया और फिर उनका नाम प्राप्त करना एक अच्छी विधि थी? क्योंकि यदि उपयोगकर्ता एक चुनिंदा कथन करता है जो सभी कॉलम का उपयोग नहीं करता है, तो मेरे लिए चयनित कॉलम के नाम जानने के लिए कोई रास्ता नहीं है या नहीं। – anon58192932

+1

आप अपने डेटाटाइप के साथ किसी दिए गए परिणाम में मौजूद कॉलम जानने के लिए ResultSetMetaData का उपयोग कर सकते हैं। – Vikdor

+0

हाँ मैं यही कर रहा हूं :) मैंने सादगी के लिए हार्ड कोड 0 का उपयोग किया क्योंकि मैं बग की उत्पत्ति को खोजने की कोशिश कर रहा था। – anon58192932

2

कॉलम इंडेक्स 1 से शुरू होता है। इसलिए अपने परिवर्तनीय पॉइंटिंग कॉलम वैरिएबल को 1.

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