2008-10-02 16 views
23

मैंने परिणाम प्राप्त करने के लिए एक जेडीबीसी क्वेरी निष्पादित की है। इसे फिर से शुरू करने से पहले, मैं जल्दी से यह जानना चाहता हूं कि कितनी पंक्तियां लौटा दी गईं। मैं इसे उच्च प्रदर्शन के साथ कैसे कर सकता हूं?मैं जेडीबीसी में पंक्ति गणना कैसे प्राप्त करूं?

मैं जावा 6, ओरेकल 11 जी, और नवीनतम ओरेकल जेडीबीसी ड्राइवरों का उपयोग कर रहा हूं।

उत्तर

26

आप उदाहरण के लिए, एक अलग प्रश्न के रूप में यह करने के लिए करने जा रहे हैं:

SELECT COUNT(1) FROM table_name 

कुछ JDBC चालकों आपको बता सकता है, लेकिन यह वैकल्पिक व्यवहार है और, बात करने के लिए और अधिक, ड्राइवर नहीं हो सकता अभी तक पता है। यह क्वेरी के अनुकूलन के कारण हो सकती है जैसे ओरेकल में दो उदाहरण निष्पादन रणनीतियों को जितनी जल्दी हो सके सभी पंक्तियां प्राप्त करने या जितनी जल्दी हो सके पहली पंक्ति प्राप्त करने के लिए।

यदि आप दो अलग-अलग प्रश्न (एक गिनती और दूसरी क्वेरी) करते हैं तो आपको उन्हें उसी लेनदेन में करना होगा। यह ओरेकल पर अच्छी तरह से काम करेगा लेकिन अन्य डेटाबेस पर समस्याग्रस्त हो सकता है (उदाहरण के लिए एसक्यूएल सर्वर या तो आपको असामान्य डेटा दिखाएगा या आपके अलगाव स्तर के आधार पर बाहरी असामान्य अद्यतन पर ब्लॉक करेगा जबकि ओरेकल एक अलगाव स्तर का समर्थन करता है जो आपको एक लेनदेन के अनुरूप दृष्टिकोण देता है बाहरी अपडेट पर अवरुद्ध किए बिना डेटा)।

आम तौर पर यह वास्तव में कोई फर्क नहीं पड़ता कि कितनी पंक्तियां हैं। आम तौर पर इस तरह की क्वेरी बैच संसाधित या पेज की होती है और किसी भी तरह से आपके पास लोड/संसाधित पंक्तियों के रूप में प्रगति की जानकारी होती है और आप परिणाम सेट (स्पष्ट रूप से) के अंत का पता लगा सकते हैं।

+0

अच्छा जवाब है, हालांकि मैं प्रगति के बारे में जानकारी होने के बारे में अंतिम टिप्पणी समझ में नहीं आता। यह कहां से आ रहा है? – Aktau

+0

इसके लिए एक और प्रश्न की आवश्यकता है। यदि आपके पास स्क्रोल करने योग्य परिणाम हैं तो अन्य उत्तरों में बेहतर विकल्प हैं। – JDuarteDJ

18

संक्षिप्त उत्तर: आप नहीं कर सकते।

लंबा उत्तर: आप आंशिक रूप से नहीं कर सकते क्योंकि डेटाबेस आंशिक रूप से क्वेरी का मूल्यांकन कर सकता है, केवल पंक्तियों को वापस लौटाते हुए आप उनके लिए पूछते हैं।

संपादित करें: एक स्क्रॉल ResultSet का उपयोग करके आप

दरअसल कर सकते हैं :), मैं जावा में यह बहुत ही सवाल समाचार समूह डेटाबेस एक लंबे समय पहले (! 2001 में) से पूछा और कुछ helpful responses था।

4

यदि आपका ड्राइवर इसका समर्थन करता है (!), तो आप ResultSet.afterLast() ResultSet.getRow() ResultSet.beforeFirst() पर कॉल कर सकते हैं। प्रदर्शन अच्छा हो सकता है या नहीं भी हो सकता है।

एक बेहतर समाधान आपके एल्गोरिदम को फिर से लिखना होगा ताकि आकार के सामने की आवश्यकता न हो।

15
ResultSet rs = stmt.executeQuery(sql); 
int rowCount = rs.last() ? rs.getRow() : 0; // Number of rows in result set. Don't forget to set cyrsor to beforeFirst() row! :) 
+4

अच्छा काम करता है। आपको यह जोड़ना चाहिए कि इसके लिए आपको स्क्रोल करने योग्य परिणाम सेट की आवश्यकता है। –

+0

पिछली टिप्पणी का समर्थन करें और मुझे लगता है कि यह सही जवाब होना चाहिए, क्योंकि यह करने के लिए यह एक छोटा और अधिक अप्रत्यक्ष तरीका प्रदान करता है! – JDuarteDJ

+0

यह कैसे काम करता है? – Winter

0

कोड:

//Create a Statement class to execute the SQL statement 
Statement stmt = con.createStatement(); 

ResultSet rs = stmt.executeQuery("SELECT COUNT(*) AS COUNT FROM 
TABLENAME"); 

while(rs.next()) { 
    System.out.println("The count is " + rs.getInt("COUNT")); 
} 

//Closing the connection 
con.close(); 
+0

यह जवाब होना चाहिए। अच्छी तरह से काम। –

+1

सवाल यह है कि परिणाम में कितनी पंक्तियां हैं। तालिका – ernesto

10

JDBC से पंक्तियों की संख्या प्राप्त करने के लिए:

ResultSet rs = st.executeQuery("select count(*) from TABLE_NAME"); 
rs.next(); 
int count = rs.getInt(1); 
+3

की पंक्ति गणना नहीं है कोई भी टेबल में कितनी पंक्तियों के लिए नहीं पूछ रहा है, सवाल यह है कि परिणाम में कितनी पंक्तियां हैं। – ernesto

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