oracle - Convert Java String to CLOB -


मेरे पास निम्न तालिका है:  यहाँ छवि विवरण दर्ज करें

समस्या यह है कि जब मैं इस क्षेत्र में स्ट्रिंग सम्मिलित करने के लिए JDBC का उपयोग करने की कोशिश करता हूं तो मुझे हमेशा निम्न त्रुटि मिलती है:

  java.sql.SQLException: डाटा इस प्रकार के लिए अधिकतम आकार से भी बड़ा आकार: 6019   

अब मुझे क्या करना चाहिए

सम्मिलित उत्पन्न करने के लिए जावा कोड है निम्नलिखित:

  कनेक्शन conn2 = null; If (connection == null || connection.isClosed ()) {System.out.println ("कनेक्शन रिक्त है"); Conn2 = connectDB (); } // REPLACE MySQL से गैर मानक एसक्यूएल है, यह INSERT IGNORE स्ट्रिंग sql = "" का काउंटर भाग है; एसक्यूएल = "टेस्ट में सम्मिलित करें।" + tablename + "(" + क्षेत्रों + ") मान (" + fields.replaceAll ( "[^,]",) + '? "") "; System.out.println ("SQL:" + sql); तैयार किए गए स्टेटमेंट pstmt = conn2.prepareStatement (एसक्यूएल); // इंट ईवेंट पार्सिंग प्रारंभ करें = r.getEventType (); जबकि (सही) {// प्रत्येक के लिए तत्व चाहते थे (घटना == XMLStreamConstants.START_ELEMENT & amp; & amp; r.getName () toString () equalsIgnoreCase ( "पंक्ति")।।) {println ( "तालिका: "+ Tablename +" / पंक्ति: "+ पंक्ति पंक्ति); यदि (विशेषता संख्या == 0) विशेषता काउंट = आर.गेटअट्रिब्यूटकाउंट (); // प्रत्येक पैरामीटर एसक्यूएल इंट एफ = 1; (स्ट्रिंग फील्ड: फ़ील्डअरे) के लिए {स्ट्रिंग मान = आर.गेटअेट्टीव्यूव्यू ("", फ़ील्ड); अगर ( "शरीर" .equalsIgnoreCase (क्षेत्र) & amp; & amp;! मान = नल) {pstmt.setCharacterStream (च ++, नई CharArrayReader (value.toCharArray ()), value.length ()); } और {pstmt.setString (f ++, मान); }} Pstmt.addBatch (); ROWCOUNT ++; अगर (पंक्ति पंक्ति% rowspercommit == 0) {System.out.println ("पंक्ति में आयात" + पंक्ति पंक्ति + "..."); pstmt.executeBatch (); conn2.commit (); }} // प्रत्येक पंक्ति के लिए अंत   

सुनिश्चित करें कि कैसे बनाएँ तालिका है, क्योंकि किसी ने मेरे लिए ऐसा किया

वर्तमान कोड के साथ, मुझे अब यह मिल रहा है:

 <कोड> सूत्र में अपवाद "मुख्य" oracle.jdbc.dbaccess.DBDataSetImpl.clearItem (DBDataSetImpl.java:3528) पर oracle.jdbc.dbaccess.DBData.clearItem (DBData.java:431) पर java.lang.NullPointerException पर Oracle.jdbc.driver.OraclePreparedStatement.checkBindTypes (OraclePreparedStatement.java:3271) oracle.jdbc.driver.OraclePreparedStatement.setStreamItem पर (OraclePreparedStatement.java1178) oracle.jdbc.driver.OraclePreparedStatement.setCharacterStream पर (OraclePreparedStatement.java:3539) XMLDumpImporter.main पर XMLDumpImporter.importXMLFile (XMLDumpImporter.java:179) XMLDumpImporter.importXMLFolder (XMLDumpImporter.java:117) पर (XMLDumpImporter.java:48) पर   

लाइन में:

  यदि ("body" .equals ignoreCase (field) & amp; amp; Value! = Null) {pstmt.setCharacterStream (f ++, नया CharArrayReader (value.toCharArray ()), value.length ());   

जिसने कोई भी अर्थ नहीं किया था कि संभवत: रिक्त हो सकता है

ऐसा लगता है कि आप clob के मूल्य को सेट करने के लिए setCharacterStream के बजाय setString का उपयोग कर रहे हैं यदि आप setString का उपयोग कर रहे हैं तो शायद ड्राइवर को मान को varchar2 में बदल दिया जाता है जिसकी आकार 4000 वर्णों की है

हैकटीय हैक: <प्री> इंट फील्ड इंडेक्स = 0; (स्ट्रिंग फ़ील्डनाम: फ़ील्डअरे) के लिए {स्ट्रिंग मान = आर.गेटअेट्टीव्यूव्यू ("", फ़ील्ड); अगर (मान! = नल & amp; amp; amp; amp; शरीर;। समानताएं अज्ञातकैस (फ़ील्डनाम)) {pstmt.setCharacterStream (++ फ़ील्ड इंडेक्स, नई StringReader (मान), value.length ()); } अन्य {pstmt.setString (++ फ़ील्ड इंडेक्स, मान); }}

प्रासंगिक प्रलेखन:

  • या
  • < / Li>

Comments