JDBC ResultSet से कॉलम की संख्या कैसे प्राप्त करें?


92

मैं एक सीएसवी-फ़ाइल का उपयोग करने के लिए सीएसवी- सीएससी (यह सीएसवी-फाइलों के लिए एक जेडीबीसी-चालक है) का उपयोग कर रहा हूं । मुझे नहीं पता कि csv-file में कितने कॉलम हैं। मैं कॉलमों की संख्या कैसे प्राप्त कर सकता हूं? क्या इसके लिए कोई जेडीबीसी-समारोह है? मुझे java.sql.ResultSet में इसके लिए कोई भी तरीका नहीं मिल रहा है।

फ़ाइल तक पहुँचने के लिए, मैं CsvJdbc वेबसाइट पर उदाहरण के समान कोड का उपयोग करता हूं।

जवाबों:


250

आप ResultSetMetaData से कॉलम नंबर प्राप्त कर सकते हैं :

Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();

int columnsNumber = rsmd.getColumnCount();

1
यह समझना दिलचस्प होगा कि CSV JDBC ड्राइवर और ResultSetMetaDataकार्यान्वयन इसे चर लंबाई CSV रिकॉर्ड कैसे संभालता है। उदाहरण यदि आप निर्दिष्ट करते हैं SELECT * FROM sampleऔर प्रत्येक पंक्ति में अलग-अलग संख्या में फ़ील्ड होते हैं, तो क्या स्तंभ की गणना उस प्रत्येक पंक्ति के लिए पुनर्मूल्यांकन की जाएगी जो इससे अधिक पुनरावृत्त थीं?
19

@ श्रु यह आसान है। यह नहीं होगा, क्योंकि मेटाडेटा इस बात से स्वतंत्र है कि आप किस पंक्ति पर हैं। तो संभवतः यह अधिकतम पाया गया कॉलम है।
का मार्किस

8
PreparedStatement ps=con.prepareStatement("select * from stud");

ResultSet rs=ps.executeQuery();

ResultSetMetaData rsmd=rs.getMetaData();

System.out.println("columns: "+rsmd.getColumnCount());  
System.out.println("Column Name of 1st column: "+rsmd.getColumnName(1));  
System.out.println("Column Type Name of 1st column: "+rsmd.getColumnTypeName(1)); 

1
किसी को पता है? क्या rs.getMetaData()विधि महंगी है? क्या यह डेटाबेस को हर बार उसके बुलाए जाने या न होने की क्वेरी करता है?
फंदी सुसंतो

rs.getMetaData()कॉल गहन हो सकता है; लेकिन एक बार जब आपके पास वस्तु होती है rsmdतो आमतौर पर मेटाडेटा ऑब्जेक्ट पर तरीकों को लागू करते समय डेटाबेस में कोई अतिरिक्त कॉल नहीं किया जाता है; सभी मेटाडेटा getMetaData कॉल के साथ आबाद है।
मार्क स्टीवर्ट

2
ऐसा नहीं होना चाहिए rsmd.getColumnName (1) और rsmd.getColumnTypeName (1)? हम "1 कॉलम" प्रिंट कर रहे हैं, दूसरा नहीं।
DAB

5

परिणाम सेट में एक कॉलम की संख्या आपको कोड के साथ मिल सकती है (जैसा कि DB PostgreSQL का उपयोग किया जाता है):

// PostgreSQL के लिए ड्राइवर लोड करें
Class.forName ( "org.postgresql.Driver");

स्ट्रिंग url = "jdbc: postgresql: // localhost / test";
गुण गुण = नए गुण ();
props.setProperty ( "उपयोगकर्ता", "mydbuser");
props.setProperty ( "पासवर्ड", "mydbpass");
कनेक्शन कॉन = DriverManager.getConnection (url, props);

// कथन बनाएँ
स्टेटमेंट स्टेटमेंट = con.createStatement ();

// एक परिणाम सेट प्राप्त करें
ResultSet rs = stat.executeQuery ("Select c1, c2, c3, c4, c5 MY_TABLE से");

// परिणाम सेट से मेटाडेटा दें
ResultSetMetaData rsmd = rs.getMetaData ();

// कॉलम मेटाडेटा ऑब्जेक्ट से गणना करता है
int numOfCols = rsmd.getColumnCount ();

लेकिन आप स्तंभों के बारे में अधिक मेटा-informations प्राप्त कर सकते हैं:

for(int i = 1; i <= numOfCols; i++)
{
    System.out.println(rsmd.getColumnName(i));
}

और कम से कम लेकिन कम से कम, आप न केवल तालिका के बारे में, बल्कि डीबी के बारे में भी कुछ जानकारी प्राप्त कर सकते हैं, यह कैसे करें आप यहां और यहां पा सकते हैं ।


4

कनेक्शन को एस्टेब्लिश करने और क्वेरी को निष्पादित करने के बाद यह प्रयास करें:

 ResultSet resultSet;
 int columnCount = resultSet.getMetaData().getColumnCount();
 System.out.println("column count : "+columnCount);

-1

यह कॉलम में डेटा प्रिंट करेगा और अंतिम कॉलम पहुंचने के बाद नई लाइन में आएगा।

ResultSetMetaData resultSetMetaData = res.getMetaData();
int columnCount = resultSetMetaData.getColumnCount();
for(int i =1; i<=columnCount; i++){
                if(!(i==columnCount)){

                    System.out.print(res.getString(i)+"\t");
                }
                else{
                    System.out.println(res.getString(i));
                }

            }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.