Te recomendamos que pruebes esta solución en un ambiente controlado antes de pasarlo a producción, un saludo.
Solución:
La forma más fácil es simplemente usar el
stmt.setString(position, xml);
métodos (para cadenas “pequeñas” que se pueden guardar fácilmente en la memoria de Java), o
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();
ANTICUADO Vea la respuesta de Lukas Eder a continuación.
Con alrededor de 100 líneas de código 😉 Aquí hay un ejemplo.
El punto principal: a diferencia de otros controladores JDBC, el de Oracle no admite el uso Reader
y InputStream
como parámetros de un INSERT
. En su lugar, debe SELECT
los CLOB
columna FOR UPDATE
y luego escribir en el ResultSet
Le sugiero que mueva este código a un método/clase auxiliar. De lo contrario, contaminará el resto de su código.
pasando el contenido xml como string.
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();
valoraciones y reseñas
Si te animas, eres capaz de dejar un enunciado acerca de qué te ha impresionado de este escrito.