Мне нужно записать содержимое XML файла в базу данных oracle, где столбец имеет тип данных CLOB. Как я это сделаю?
Java: как вставить CLOB в базу данных oracle
Ответ 1
Примерно со 100 строк кода;-) Вот пример.
Главное: в отличие от других драйверов JDBC, один из Oracle не поддерживает использование Reader и InputStream в качестве параметров INSERT. Вместо этого вы должны SELECT столбца CLOB FOR UPDATE, а затем  записать в ResultSet
Я предлагаю вам переместить этот код в вспомогательный метод/класс. В противном случае он будет загрязнять остальную часть вашего кода.
Ответ 2
Самый простой способ - просто использовать
stmt.setString(position, xml);
(для "маленьких" строк, которые можно легко хранить в памяти Java) или
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();
}
		Ответ 3
передача содержимого 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();
    }
  }
		Ответ 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();
}
		Ответ 5
Для этого вам нужно сделать набор результатов соединения
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();
}
Примечание: важно, чтобы вы добавили фразу для обновления в конце запроса, который записывается для выбора строки...
Следуйте приведенному выше коду, чтобы вставить XML файл
Ответ 6
Преобразование clob в строку:
Clob clob=rs.getClob(2);      
String str=(String)clob.getSubString(1,(int)clob.length());      
System.out.println("Clob Data is : "+str);
		Ответ 7
Вы можете очень хорошо сделать это с помощью кода ниже, я даю вам только код для вставки xml надеюсь, что вы закончили с остальными вещами.
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);
Я сделал так, и он работает нормально.