2014-10-13 6 views
7

मैं एक जावा प्रोग्राम बनाने की कोशिश कर रहा हूं जो ओडीबीसी डेटासॉर एक्सेस करता है। निम्नलिखित कोड का उपयोग करना ...जावा ओडीबीसी परिणामों के साथ एक कनेक्शन बनाना java.sql.SQLException में: अमान्य कर्सर प्रकार अपवाद

Connection conn; 

try { 
    Driver d = (Driver)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); 
    DriverManager.registerDriver(d); 
    String URL = "jdbc:odbc:AR System ODBC Data Source"; 
    conn = DriverManager.getConnection(URL); 
} catch (SQLException | InstantiationException | IllegalAccessException | ClassNotFoundException e) { 
    Logger.error(this, e); 
} 

Statement s = null; 
ResultSet rs = null; 

try { 
    s = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); 
    rs = s.executeQuery("select count(*) as rows from table"); 

    if (rs.next()) { 
     System.out.print("Count of all rows is " + rs.getInt("rows")); 
    } 
} catch (SQLException e) { 
    e.printStackTrace(); 
} finally { 
    DBUtils.safelyClose(s, rs); 
} 

... मैं निम्नलिखित अपवाद प्राप्त करें:

java.sql.SQLException: The result set type is not supported. 
    at sun.jdbc.odbc.JdbcOdbcStatement.initialize(Unknown Source) 
    at sun.jdbc.odbc.JdbcOdbcConnection.createStatement(Unknown Source) 
    at sun.jdbc.odbc.JdbcOdbcConnection.createStatement(Unknown Source) 
    at com.csc.remedyarchiver.data.input.ODBCConnection.main(ODBCConnection.java:38) 

मूल रूप से, जब मैं अपने दम पर यह समाधान करने का प्रयास किया गया था, मैं खाली तर्क createStatement उपयोग कर रहा था() कॉल करें लेकिन यह उपर्युक्त अपवाद का कारण बनता है (इसलिए मैंने TYPE_FORWARD_ONLY परिणाम सेट प्रकार का उपयोग किया लेकिन फिर भी वही परिणाम):

क्या कोई और चीज है जिसके साथ मैं कोशिश कर सकता हूं या इसे एक अलग दृष्टिकोण की आवश्यकता है?

+0

समय बदलने पर जांचें। बताएं (rs.next()) { System.out.print ("सभी पंक्तियों की गणना" + rs.getInt ("पंक्तियां") है; } –

+0

@PiumiWandana - यह अमान्य कर्सर प्रकार अपवाद के साथ काम नहीं करता है। – Ocracoke

+0

'createStatement()' में 'ResultSet.CLOSE_CURSORS_OVER_COMMIT' पैरामीटर जोड़ने का प्रयास करें, यह देखने के लिए कि क्या यह –

उत्तर

0

"तालिका से पंक्तियों के रूप में गिनती (*) का चयन करें"। उपनाम को "पंक्तियों" से "परिणाम" या कुछ में बदलने के लिए पहले प्रयास करें। पंक्तियां ओरेकल में आरक्षित कीवर्ड में से एक है। मुझे नहीं लगता कि चयन किसी त्रुटि के अलावा किसी भी परिणाम को वापस कर रहा है 00923

+0

कोड उस तक नहीं पहुंचता है जब तक कि यह कथन ऑब्जेक्ट प्रारंभ नहीं करता है। फिर भी, यह ध्यान में रखना कुछ है। – Ocracoke

0

क्या यह निम्नलिखित की कोशिश करने लायक होगा, पहले यह पुष्टि करने के लिए कि यह असमर्थित है, फिर फिर से अलग-अलग परिणामसेट प्रकारों को खोजने के लिए?

System.out.println(conn.getMetaData().supportsResultSetType(ResultSet.TYPE_FORWARD_ONLY)); 
+0

जावा तीन7 के सभी तीन परिणामसेट प्रकारों के लिए, वे सभी झूठी वापसी करते हैं। – Ocracoke

+0

यदि वे झूठी वापसी कर रहे हैं, तो यह आपके लिए कभी भी काम नहीं करेगा। शायद आप जिस ओडीबीसी ड्राइवर का उपयोग कर रहे हैं उसके साथ कोई समस्या है? इस आदमी को एक ही समस्या है और एक अलग जेडीबीसी चालक का उपयोग कर इसके आसपास काम किया है। http://www.mirthcorp.com/community/forums/archive/index.php/t-3966.html –

1

डेटा सेट पुन: प्राप्त करने के लिए Oracle प्रलेखन से:

नोट: सभी डेटाबेस और JDBC ड्राइवर को सभी ResultSet प्रकार समर्थन करते हैं। विधि डेटाबेस MetaData.supportsResultSetType सत्य लौटाता है यदि निर्दिष्ट परिणामसेट प्रकार समर्थित है और अन्यथा गलत है।

https://docs.oracle.com/javase/tutorial/jdbc/basics/retrieving.html

तो शुरू करने के लिए, आपको लगता है कि आपके कनेक्शन परिणाम का समर्थन करता है सेट आप का उपयोग करने की कोशिश कर रहे हैं की जाँच कर सकते हैं।

connection.getMetaData().supportsResultSetType(ResultSet.TYPE_FORWARD_ONLY) 
connection.getMetaData().supportsResultSetType(ResultSet.CONCUR_READ_ONLY) 

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

http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html

आप सत्यापित कर दिया है कि आप नवीनतम ड्राइवर का उपयोग कर रहे हैं, मैं डाटाबेस आप कर रहे हैं के संस्करण सत्यापित करेंगे,: आप यह सुनिश्चित करने के लिए आपको नवीनतम OJDBC चालक जिसे आप यहां से प्राप्त कर सकते हैं का उपयोग कर रहे चाहते हो सकता है का उपयोग कर, और परिणाम सेट द्वारा समर्थित सेट।

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