2011-04-05 12 views

उत्तर

10

कोड के बारे में 100 लाइनों के साथ उपयोग करने के लिए है ;-) Here is an example

मुख्य बिंदु: अन्य जेडीबीसी ड्राइवरों के विपरीत, ओरेकल से एक Reader और InputStream का उपयोग INSERT के पैरामीटर के रूप में करने का समर्थन नहीं करता है। इसके बजाय, आप CLOB स्तंभ FOR UPDATE और फिर लिखने ResultSet

में मेरा सुझाव है कि आप एक सहायक विधि/वर्ग में इस कोड को ले जाने के SELECT चाहिए। अन्यथा, यह आपके शेष कोड को प्रदूषित करेगा।

+0

+1 अद्यतन किया।[SetStringForClob] के लिए – asgs

20

सबसे आसान तरीका है बस

stmt.setString(position, xml); 

तरीकों ("छोटे" स्ट्रिंग्स के लिए जो आसानी से जावा स्मृति में रखा जा सकता है), या

try { 
    java.sql.Clob clob = 
    oracle.sql.CLOB.createTemporary(
     connection, false, oracle.sql.CLOB.DURATION_SESSION); 

    clob.setString(1, xml); 
    stmt.setClob(position, clob); 
    stmt.execute(); 
} 

// Important! 
finally { 
    clob.free(); 
} 
+0

हम्म, आप सही हैं। मैंने हाल ही में कोशिश नहीं की। मैं वैकल्पिक –

+0

के साथ अपनी प्रतिक्रिया अपडेट करूंगा, oracle.sql.CLOB.DURATION_SESSION का उपयोग क्या है? –

+0

@ वी-वसंत: एक ओरेकल 'सीएलओबी 'जीवन चक्र के साथ एक" जुड़ा हुआ "वस्तु है जो वास्तविक संदर्भ बनाने वाले प्रश्नों से स्वतंत्र है। जहां तक ​​मुझे पता है, आप 'INSERT' /' UPDATE' निष्पादित होने के बाद भी वास्तविक LOB को पढ़/लिख सकते हैं। मुझे इस बारे में सुनिश्चित करने के लिए विवरण देखना होगा, हालांकि ... –

2

इस उद्देश्य आप कनेक्शन परिणाम सेट

ResultSet.TYPE_SCROLL_SENSITIVE बनाने की जरूरत के लिए, ResultSet.CONCUR_UPDATABLE

Connection con=null; 
//initialize connection variable to connect to your database... 
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
String query="Select MYCLOB from TABLE_NAME for update"; 
con.setAutoCommit(false); 
ResultSet resultset=stmt.executeQuery(query); 


if(resultset.next()){ 
oracle.sql.CLOB clobnew = ((OracleResultSet) rss).getCLOB("MYCLOB"); 
PrintWriter pw = new PrintWriter(clobnew.getCharacterOutputStream()); 
BufferedReader br = new BufferedReader(new FileReader(new File("filename.xml"))); 
String lineIn = null; 
while((lineIn = br.readLine()) != null) 
     pw.println(lineIn); 
     pw.close(); 
     br.close(); 
} 

con.setAutoCommit(true); 
con.commit(); 
} 

नोट: अपनी महत्वपूर्ण है कि आप अद्यतन के लिए वाक्यांश जोड़ना पंक्ति का चयन करने के लिए लिखे गए प्रश्न के अंत में ...

टी का पालन करें वह कोड ऊपर स्ट्रिंग के लिए CLOB परिवर्तित एक्सएमएल फ़ाइल

2

डालने के लिए:

Clob clob=rs.getClob(2);  
String str=(String)clob.getSubString(1,(int)clob.length());  
System.out.println("Clob Data is : "+str); 
2

आप बहुत अच्छी तरह से नीचे दिए गए कोड के साथ यह कर सकते हैं, मैं तुम्हें एक्सएमएल डालने के लिए सिर्फ कोड दे रहा हूँ उम्मीद यू बाकी के साथ किया जाता है अन्य चीजों के ..

import oracle.xdb.XMLType; 

//now inside the class...... 
// this will be to convert xml into string 

File file = new File(your file path); 
FileReader fileR = new FileReader(file); 
fileR.read(data); 
String str = new String(data); 

// now to enter it into db 

conn = DriverManager.getConnection(serverName, userId, password); 

XMLType objXml = XMLType.createXML(conn, str); 

// inside the query statement put this code 

objPreparedstatmnt.setObject(your value index, objXml); 

मैंने ऐसा किया है और यह ठीक काम कर रहा है।

4

स्ट्रिंग के रूप में XML सामग्री को पास कर रहा है।

table1 

ID int 
XML CLOB 



import oracle.jdbc.OraclePreparedStatement; 
/* 
Your Code 
*/ 
void insert(int id, String xml){ 
    try { 
     String sql = "INSERT INTO table1(ID,XML) VALUES (" 
       + id 
       + "', ?)"; 
     PreparedStatement ps = conn.prepareStatement(sql); 
     ((OraclePreparedStatement) ps).setStringForClob(1, xml); 
     ps.execute(); 
     result = true; 
     } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
+1

+1 (http://docs.oracle.com/cd/E11882_01/appdev.112/e13995/oracle/jdbc/OraclePreparedStatement.html#setStringForClob_int__java_lang_String_) – ceving

4

यह कोड मेरे लिए काम करता है। मैं ojdbc6-11.2.0.2.jar का उपयोग करता हूं।

java.sql.Connection con; 
javax.xml.bind.Marshaller marshaller; 

Clob xmlClob = con.createClob(); 
try { 
    try (Writer xmlClobWriter = xmlClob.setCharacterStream(1)) { 
    m.marshal(jaxbObject, xmlClobWriter); 
    } // xmlClobWriter.close(); 
    try (PreparedStatement stmt = con.prepareStatement("INSERT INTO table (xml) values(?)")) { 
    stmt.setClob(1, xmlClob); 
    stmt.executeUpdate(); 
    } 
} finally { 
    xmlClob.free(); 
} 
संबंधित मुद्दे