Diferencia entre revisiones de «CLOB de Oracle»

De Dos Ideas.
Saltar a: navegación, buscar
Línea 9: Línea 9:
 
  import oracle.sql.CLOB;
 
  import oracle.sql.CLOB;
 
   
 
   
  public class UnDaoImpl extends HibernateDaoSupport implements unDao {
+
  public class UnDaoImpl extends JdbcDaoSupport implements unDao {
 
   
 
   
 
  public void inicializarReporte(Long idPeticion, Iterator<String> iteradorDeDatos) {
 
  public void inicializarReporte(Long idPeticion, Iterator<String> iteradorDeDatos) {
Línea 18: Línea 18:
 
                       + " FOR UPDATE;";     
 
                       + " FOR UPDATE;";     
 
   try {
 
   try {
       PreparedStatement pstmt = getSession().connection()
+
       PreparedStatement pstmt = getConnection()
 
                                   .prepareStatement(sqlConsulta);
 
                                   .prepareStatement(sqlConsulta);
 
       ResultSet rs = pstmt.executeQuery();
 
       ResultSet rs = pstmt.executeQuery();
Línea 45: Línea 45:
 
== Ver también ==
 
== Ver también ==
 
* [[Oracle]]
 
* [[Oracle]]
* [[Hibernate]]
 
 
* [[JDBC]]
 
* [[JDBC]]
 
* [http://www.oracle.com/technology/docs/tech/java/sqlj_jdbc/doc_library/javadoc/oracle.sql.CLOB.html Javadoc CLOB]
 
* [http://www.oracle.com/technology/docs/tech/java/sqlj_jdbc/doc_library/javadoc/oracle.sql.CLOB.html Javadoc CLOB]

Revisión del 13:05 23 sep 2009

La clase Java del driver JDBC de Oracle oracle.sql.CLOB ofrece el método getCharacterOutputStream() que nos permite obtener un java.io.Writer para ir escribiendo directamente en la base. Incluso cuando los datos que se desean guardar son muchos se puede ir iterando y agregarlos de a poco. Hay que tener cuidado porque el Writer.append(String string) empieza a escribir en la primera posición de memoria cada vez que se obtiene el Writer.

Acá les dejo un pequeño ejemplo import java.io.Writer;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import oracle.sql.CLOB;

public class UnDaoImpl extends JdbcDaoSupport implements unDao {

public void inicializarReporte(Long idPeticion, Iterator<String> iteradorDeDatos) {
  String sqlConsulta = "SELECT ARCHIVO "
                     + "FROM TABLA_CON_ARCHIVO "
                     + "WHERE  ID_PETICION = " 
                     + idPeticion 
                     + " FOR UPDATE;";     
  try {
      PreparedStatement pstmt = getConnection()
                                  .prepareStatement(sqlConsulta);
      ResultSet rs = pstmt.executeQuery();
      rs.next();
      CLOB clob = (CLOB) rs.getClob(1);
      clobWriter = clob.getCharacterOutputStream();
      
      if (iteradorDeDatos.hasNext()){
        clobWriter.write(iteradorDeDatos.next());

        while (iteradorDeDatos.hasNext()) {
          clobWriter.append(iteradorDeDatos.next());
        } 
      }      
  } finally {
    try {
        clobWriter.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
  }
}

Ver también