2015-09-11 12 views
5

मैंने डीबी 2 प्रक्रिया वापस कर दी है जो तालिका में से किसी एक के लिए कर्सर लौटा रही है।जावा में कॉल करने योग्य वक्तव्य से CURSOR पुनर्प्राप्ति के दौरान अपवाद को हल करने के लिए कैसे हुआ?

यह प्रक्रिया मेरी जावा कोड से फोन किया और कर रहा है और एक परिणाम के रूप में सेट कर्सर होने बह SqlException अपवाद लॉग पुनः प्राप्त करने,

com.ibm.db2.jcc.am.jo: [jcc][t4][10335][10366][4.7.85] 
Invalid operation: Connection is closed. ERRORCODE=-4470, SQLSTATE=08003 
    at com.ibm.db2.jcc.am.dd.a(dd.java:666) 
    at com.ibm.db2.jcc.am.dd.a(dd.java:60) 

मैं इस अपवाद के लिए समाधान की खोज और आईबीएम वेबसाइट link पर इस समाधान पाया truing जो लॉग कॉन्फ़िगरेशन बदलने के लिए सुझाव देते हैं,

लॉग फ़ाइल आकार और प्राथमिक और माध्यमिक लॉग फ़ाइलों की संख्या बढ़ाएं। Num_log_span मान भी समायोजित किया जा सकता है।

यहाँ प्रक्रिया उदाहरण है,

CREATE OR REPLACE PROCEDURE ABC(c_dump OUT SYS_REFCURSOR) IS 
BEGIN 
    open c_dump FOR 
    select feild1,feild1,.... from RSPNSE_TABLE; 
END; 

जावा कोड नीचे दी गई है,

public void callStoredProc(){ 

     Connection dbConnection = null; 
     CallableStatement callableStatement = null; 
     ResultSet rs = null; 

     String proc = "{call ABC(?)}"; 

     try { 
      dbConnection = connection; 
      callableStatement = dbConnection.prepareCall(proc); 

      callableStatement.registerOutParameter(1, DB2Types.CURSOR); 


      // execute getDBUSERCursor store procedure 
      callableStatement.executeUpdate(); 

      // get cursor and cast it to ResultSet 
      rs = (ResultSet) callableStatement.getObject(1); 


     } catch (SQLException e) { 

      e.printStackTrace(); 
      System.out.println(e.getMessage()); 

     } 

    } 

इस जावा कोड में अब इस लाइन पर टूट रहा है callableStatement = dbConnection.prepareCall(proc);

नोट: अपवाद लॉग के बावजूद "कनेक्शन बंद है" पाठ मैं उल्लेख करना चाहता हूं कि मैंने जेडीबीसी का उपयोग कर डेटाबेस सामान्य पुनर्प्राप्ति के साथ सफलतापूर्वक कनेक्शन स्थापित किया है, इसमें कोई समस्या नहीं है।

+0

चालक का कहना है कि कनेक्शन बंद है, आप कहते हैं कि यह नहीं है; विश्वास करने के लिए कौन? हो सकता है कि आप 'readyCall()' से पहले कनेक्शन पर 'isclosed()' या 'isValid()' कॉल करना चाहते हैं? – mustaccio

+0

क्या आप उत्पाद का उपयोग और संस्करण संख्या प्रदान कर सकते हैं? सर्वर ओएस, डीबी 2 और जेडीबीसी चालक? –

उत्तर

0

तैयार कॉल विफलता इंगित करता है कि आपके पास खुला कनेक्शन नहीं है। आपको SQLException में खोदना होगा और वास्तव में क्यों तय करना होगा।

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