2012-08-27 12 views
8

के साथ सीएलओबी को स्ट्रिंग करना मैं postgreSQL डीबी से एक क्लोब पढ़ने की कोशिश कर रहा हूं, इसे बदल सकता हूं, और इसे वापस लिख सकता हूं।postgreSQL

PreparedStatement statement = connection.prepareStatement("SELECT clob_column from data where id = 1"); 
ResultSet executeQuery = statement.executeQuery(); 
executeQuery.next() 
Clob fetchedClob = executeQuery.getClob("clob_column"); 

लेकिन का उपयोग कर जब मैं नए डेटा के साथ एक नया CLOB बनाने के लिए कोशिश कर रहा हूँ:

Clob newClob = connection.createClob(); 

मैं

मैं सफलतापूर्वक निम्नलिखित कोड का उपयोग कर CLOB पढ़ने में सक्षम था अगर मैं प्राप्त किए गए CLOB संपादित करने के लिए बस की कोशिश इसके अलावा

java.lang.AbstractMethodError: com.mchange.v2.c3p0.impl.NewProxyConnection.createClob()Ljava/sql/Clob; 

, का उपयोग करते हुए: मीटर निम्न त्रुटि हो रही

fetchedClob.setString(0, "new string"); 

मैं निम्न त्रुटि हो रही है:

Method org.postgresql.jdbc4.Jdbc4Clob.setString(long,str) is not yet implemented. 

किसी भी विचार?

अद्यतन: यहाँ तालिका परिभाषा

CREATE TABLE data ( id bigint NOT NULL, clob_column text,);

धन्यवाद

उत्तर

5

getClob() उपयोग करने के लिए कोई ज़रूरत नहीं है।

ResultSet.getString() और setString() काम text स्तंभों पर बिल्कुल ठीक

+0

मैं पाठ का उपयोग कर रहा (PostgreSQL तो मैं आप text प्रयोग कर रहे हैं मान लें कि एक clob डेटाप्रकार नहीं है)। जब मैंने getString का उपयोग करने का प्रयास किया तो मुझे एक संख्या वापस मिल गई जो मुझे इसका अर्थ समझ नहीं आया (शायद वास्तविक डेटा लंबाई?)। केवल जब मैं getClob करता हूं और इसकी वर्ण धारा (getCharacterStream) को देखता हूं तो मुझे पूर्ण XML मिलता है जो डीबी में सहेजा जाता है। –

+0

@ बेनब्राचा: फिर आप हमें सब कुछ नहीं दिखा रहे हैं। 'getString()' निश्चित रूप से 'text'columns के साथ ठीक काम करता है। कृपया हमें अपनी टेबल परिभाषा दिखाएं (अपना प्रश्न संपादित करें)। –

+0

ऊपर अपडेट किया गया। अब मैं यह भी देखता हूं कि org.postgresql.jdbc3.AbstractJdbc3Clob जो मेरे एप्लिकेशन द्वारा उपयोग किया जाता है, क्लॉब के लिए सभी सेट * को लागू नहीं करता है। मुझे क्या करना चाहिए? मुझे यह भी जोड़ना चाहिए कि हम हाइबरनेट का उपयोग करें, और इस तालिका के लिए मिलान करने वाली इकाई में यह कॉलम_टेक्स्ट फ़ील्ड है जो @Lob –