java.sql.SQLException:ORA-03115:असमर्थित नेटवर्क डेटाटाइप या प्रतिनिधित्व
यह निम्नलिखित कथन के कारण होता है:
cstmt.registerOutParameter(1, OracleTypes.ARRAY);
यह कथन कहता है कि सरणी आउटपुट होगी, लेकिन वास्तविक Oracle प्रकार नाम को तीसरे पैरामीटर के रूप में निर्दिष्ट नहीं किया। इस बारे में अधिक जानकारी के लिए आप इस Oracle Doc को देख सकते हैं।
हम अपवाद को ठीक कर सकते हैं "java.sql.SQLException: ORA-03115: unsupported network datatype or representation
" वास्तविक Oracle प्रकार के नाम के साथ एक तीसरा पैरामीटर जोड़कर। आपके मामले में यह NAMESARRAY
. है ।
cstmt.registerOutParameter(1, OracleTypes.ARRAY,"NAMESARRAY");
लेकिन उपरोक्त कथन चलते समय निम्नलिखित अपवाद को फेंक देगा:
<ब्लॉकक्वॉट>java.sql.SQLException:अमान्य नाम पैटर्न:SCOTT.NAMESARRAY
ऐसा इसलिए है क्योंकि हमने NAMESARRAY
. प्रकार घोषित नहीं किया है डीबी के अंदर। उपरोक्त अपवाद उपयोगकर्ता को SCOTT कहता है, लेकिन आप अपनी पसंद के उपयोगकर्ता से जुड़ सकते हैं और प्रकार बना सकते हैं।
DB में प्रकार बनाना:
connect scott/tiger
CREATE OR REPLACE TYPE namesarray AS VARRAY(5) OF VARCHAR2(10) ;
/
एक बार जब हम टाइप कर लेते हैं NAMESARRAY
, यदि हम आपके कोड को बदले बिना निष्पादित करते हैं तो हम निम्न त्रुटि का सामना करेंगे:
java.sql.SQLException:ORA-06550:लाइन 1, कॉलम 180:
PLS-00382:व्यंजक गलत प्रकार का है ORA-06550:पंक्ति 1, स्तंभ 173:
PL/SQL:कथन पर ध्यान नहीं दिया गया
यह त्रुटि इसलिए है क्योंकि हम पहले ही उपयोगकर्ता स्तर पर प्रकार को परिभाषित कर चुके हैं, लेकिन हम निम्नलिखित कोड ब्लॉक के अंदर फिर से प्रकार बनाने का प्रयास कर रहे हैं:
String dequeueQuery = "DECLARE " +
" type namesarray IS VARRAY(5) OF VARCHAR2(10); " +
" names namesarray;" +
" total integer;" +
" BEGIN " +
" names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz'); " +
" ? := names;"+
" END;";
इसलिए, हमें उसमें से टाइप डिक्लेरेशन को हटाना होगा।
String dequeueQuery = "DECLARE " +
" names namesarray;" +
" total integer;" +
" BEGIN " +
" names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz'); " +
" ? := names;"+
" END;";
इसे हटाने के बाद यदि हम संकलन के बाद प्रोग्राम को निष्पादित करते हैं, तो हमें निम्न आउटपुट देखने में सक्षम होना चाहिए:
Kavita
Pritam
Ayan
Rishav
Aziz
अद्यतन कार्यक्रम निम्नलिखित है:
import java.io.*;
import java.sql.*;
import oracle.jdbc.*;
public class DBQC {
public static void main(String[] args) {
try {
Connection con=null;
Class.forName("oracle.jdbc.OracleDriver");
String connStr = "jdbc:oracle:thin:scott/[email protected]//dbhost:1521/dbsrvc";
con=DriverManager.getConnection(connStr);
if(con != null)
{
System.out.println("Connection succeeded");
String dequeueQuery = "DECLARE " +
" names namesarray;" +
" total integer;" +
" BEGIN " +
" names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz'); " +
" ? := names;"+
" END;";
CallableStatement cstmt = null;
con.setAutoCommit(false);
cstmt =(OracleCallableStatement)con.prepareCall(dequeueQuery);
cstmt.registerOutParameter(1, OracleTypes.ARRAY,"NAMESARRAY");
boolean b = cstmt.execute();
Array arr = cstmt.getArray(1);
String[] recievedArray = (String[]) arr.getArray();
for (int i = 0; i < recievedArray.length; i++)
System.out.println(recievedArray[i]);
con.commit();
}
con.close();
} catch(Exception e){e.printStackTrace();}
}
}