Diferencia entre revisiones de «CLOB de Oracle en Weblogic»

De Dos Ideas.
Saltar a: navegación, buscar
(Ver también)
 
(No se muestran 6 ediciones intermedias de 2 usuarios)
Línea 1: Línea 1:
Si tenemos una aplicación [[Java]] corriendo en [[WebLogic]] la forma de acceder a un [[CLOB de Oracle]] para escritura se maneja de una forma especial. en nuestro caso utilizamos [[JDBC]] y por consiguiente la clase '''weblogic.jdbc.vendor.oracle.OracleThinClob'''. Aqui dejamos un ejemplo:
+
Si tenemos una aplicación [[Java]] corriendo en [[WebLogic]] la forma de acceder a un [[CLOB de Oracle]] para escritura se maneja de una forma especial. en nuestro caso utilizamos [[JDBC]] y por consiguiente la clase '''weblogic.jdbc.vendor.oracle.OracleThinClob'''. Aqui dejamos un ejemplo:  
  
<code java5>import java.io.IOException;
+
<code java5="java5">import java.io.IOException;
 
import java.io.Writer;
 
import java.io.Writer;
 
import java.sql.Clob;
 
import java.sql.Clob;
Línea 46: Línea 46:
 
return writerDelClob;
 
return writerDelClob;
 
     }
 
     }
</code>
+
</code>  
 
 
<br>
 
  
 
Para realizar la Lectura de un CLOB de Oracle, usamos tambien JDBC, y como la clase weblogic.jdbc.vendor.oracle.OracleThinClob implementa la interfaz java.sql.Clob, utilizamos los metodos de esta ultima para obtener el contenido del CLOB. La funcion getSubString nos permite obtener desde la posicion del caracter que le indiquemos, una catidad determinada e caracteres. Con el metodo length, obtenemos el tamaño del CLOB, con lo cual podemos obtener todo el contenido, o recuperarlo por una cantidad fija de caracteres, asi como lo vemos en los siguientes ejemplos:<br>  
 
Para realizar la Lectura de un CLOB de Oracle, usamos tambien JDBC, y como la clase weblogic.jdbc.vendor.oracle.OracleThinClob implementa la interfaz java.sql.Clob, utilizamos los metodos de esta ultima para obtener el contenido del CLOB. La funcion getSubString nos permite obtener desde la posicion del caracter que le indiquemos, una catidad determinada e caracteres. Con el metodo length, obtenemos el tamaño del CLOB, con lo cual podemos obtener todo el contenido, o recuperarlo por una cantidad fija de caracteres, asi como lo vemos en los siguientes ejemplos:<br>  
  
<br>
+
<code java>import java.io.IOException;
<pre>
 
 
 
import java.io.IOException;
 
 
import java.io.OutputStream;
 
import java.io.OutputStream;
 
import java.io.OutputStreamWriter;
 
import java.io.OutputStreamWriter;
Línea 64: Línea 59:
 
import org.springframework.jdbc.core.RowMapper;
 
import org.springframework.jdbc.core.RowMapper;
 
import org.springframework.jdbc.core.support.JdbcDaoSupport;
 
import org.springframework.jdbc.core.support.JdbcDaoSupport;
 +
import com.tm.sera.dao.ClobReaderDao;
  
import com.tm.sera.dao.ClobReaderDao;
 
  
/**
 
* Implementacion usando un Clob de oracle.
 
*/
 
 
public class ClobReaderDaoImpl extends JdbcDaoSupport implements ClobReaderDao {
 
public class ClobReaderDaoImpl extends JdbcDaoSupport implements ClobReaderDao {
  
 
     /**
 
     /**
     * Query que busca el Clob por id.
+
     * Query que busca el Clob por id. Por ejemplo:
     * SELECT ARCHIVO FROM TABLA_CON_ARCHIVO WHERE ID = ? ;
+
     * SELECT ARCHIVO FROM TABLA_CON_ARCHIVO WHERE ID = ?
 
     */
 
     */
 
     private String query;
 
     private String query;
Línea 87: Línea 79:
 
     public void leerYExportarClobexportar(OutputStream writerServlet, Long id) {
 
     public void leerYExportarClobexportar(OutputStream writerServlet, Long id) {
  
         Clob clobReporte = (Clob) getJdbcTemplate().queryForObject(getQuery(), new Object[] {idPeticion }, new RowMapper() {
+
         Clob clobReporte = (Clob) getJdbcTemplate().queryForObject(getQuery(),  
 +
                                                    new Object[] {id}, new RowMapper() {
 
             public Object mapRow(ResultSet resultSet, int rowNum) throws SQLException {
 
             public Object mapRow(ResultSet resultSet, int rowNum) throws SQLException {
 
                 return (Clob) resultSet.getClob(1);
 
                 return (Clob) resultSet.getClob(1);
Línea 99: Línea 92:
 
             osWriter = new OutputStreamWriter(writerServlet);
 
             osWriter = new OutputStreamWriter(writerServlet);
  
             long tamanoClob = clob.length();
+
             long tamano = clob.length();
             long posicionDesde = 1;
+
             long posDesde = 1;
             while (posicionDesde + tamanoBuffer &lt; tamanoClob) {
+
             while (desde + tamanoBuffer &lt; tamanoClob) {
                 osWriter.write(clob.getSubString(posicionDesde, tamanoBuffer));
+
                 osWriter.write(clob.getSubString(posDesde, tamanoBuffer));
                 posicionDesde += tamanoBuffer;
+
                 posDesde += tamanoBuffer;
 
             }
 
             }
  
             osWriter.write(clob.getSubString(posicionDesde, new Long(tamanoClob - posicionDesde + 1).intValue()));
+
             osWriter.write(clob.getSubString(posicionDesde, new Long(tamano - posDesde + 1).intValue()));
  
 
         } catch (SQLException e) {
 
         } catch (SQLException e) {
Línea 117: Línea 110:
  
 
         } finally {
 
         } finally {
             if (osWriter != null) {
+
             if (osWriter&nbsp;!= null) {
 
                 try {
 
                 try {
 
                     osWriter.close();
 
                     osWriter.close();
 
                 } catch (IOException e) {
 
                 } catch (IOException e) {
                     String mensaje = "Ocurrio un error al cerrar la conexion para lectura del CLOB ID :[" + id+ "]";
+
                     String mensaje = "Ocurrio un error al cerrar la conexion para lectura del CLOB ";
 
                     throw new DataAccessResourceFailureException(mensaje, e);
 
                     throw new DataAccessResourceFailureException(mensaje, e);
 
                 }
 
                 }
Línea 127: Línea 120:
 
         }
 
         }
 
     }
 
     }
 +
</code>
  
 
+
<code java>import java.io.IOException;
 
 
 
 
 
 
 
 
</pre><pre>
 
 
 
import java.io.IOException;
 
 
import java.io.OutputStream;
 
import java.io.OutputStream;
 
import java.sql.Clob;
 
import java.sql.Clob;
Línea 143: Línea 130:
 
import org.springframework.jdbc.core.RowMapper;
 
import org.springframework.jdbc.core.RowMapper;
 
import org.springframework.jdbc.core.support.JdbcDaoSupport;
 
import org.springframework.jdbc.core.support.JdbcDaoSupport;
 +
import com.tm.sera.dao.ClobReaderDao;
 +
  
import com.tm.sera.dao.ClobReaderDao;
+
public class ClobReaderDaoImpl extends JdbcDaoSupport implements ClobReaderDao {
  
 
/**
 
/**
  * Implementacion usando un Clob de oracle.
+
  * Query que busca el Clob por id. Por ejemplo:
 +
* SELECT ARCHIVO FROM TABLA_CON_ARCHIVO WHERE ID = ?;
 
  */
 
  */
public class ClobReaderDaoImpl extends JdbcDaoSupport implements ClobReaderDao {
+
private String query;
 
 
    /**
 
    * Query que busca el Clob por id.
 
    * SELECT ARCHIVO FROM TABLA_CON_ARCHIVO WHERE ID = ? ;
 
    */
 
    private String query;
 
  
   
+
public void leerClob(Long id) {
    public void leerClob(Long id) {
+
  Clob clobReporte = (Clob) getJdbcTemplate().queryForObject(getQuery(),  
+
                                              new Object[] {id }, new RowMapper() {
        Clob clobReporte = (Clob) getJdbcTemplate().queryForObject(getQuery(), new Object[] {idPeticion }, new RowMapper() {
+
      public Object mapRow(ResultSet resultSet, int rowNum) throws SQLException {
            public Object mapRow(ResultSet resultSet, int rowNum) throws SQLException {
+
          return (Clob) resultSet.getClob(1);
                return (Clob) resultSet.getClob(1);
+
      }
            }
+
  });
        });
 
  
        String contenidoClob = null;
+
  String contenidoClob = null;
 
+
  try {
        try {
+
      long tamanoClob = clob.length();
            long tamanoClob = clob.length();
+
      contenidoClob = clob.getSubString(1, tamanoClob);
 
+
      System.out.println(contenidoClob);
            contenidoClob = clob.getSubString(1, tamanoClob);
+
  } catch (SQLException e) {
            System.out.println(contenidoClob);
+
      String mensaje = "Ocurrio un error al buscar CLOB por ID:[" + id + "]";
 
+
      throw new DataAccessResourceFailureException(mensaje, e);
 
+
  } catch (IOException e) {
        } catch (SQLException e) {
+
      String mensaje = "Ocurrio un error al acceder al CLOB por ID:[" + id + "]";
 
+
      throw new DataAccessResourceFailureException(mensaje, e);
            String mensaje = "Ocurrio un error al buscar CLOB por ID:[" + id + "]";
+
  } finally {
            throw new DataAccessResourceFailureException(mensaje, e);
+
      if (osWriter&nbsp;!= null) {
 
+
          try {
        } catch (IOException e) {
+
              osWriter.close();
            String mensaje = "Ocurrio un error al acceder al CLOB por ID:[" + id + "]";
+
          } catch (IOException e) {
            throw new DataAccessResourceFailureException(mensaje, e);
+
              String mensaje = "Ocurrio un error al cerrar la conexion para lectura del CLOB";
 
+
              throw new DataAccessResourceFailureException(mensaje, e);
        } finally {
+
          }
            if (osWriter != null) {
+
      }
                try {
+
  }
                    osWriter.close();
+
}
                } catch (IOException e) {
+
</code>  
                    String mensaje = "Ocurrio un error al cerrar la conexion para lectura del CLOB ID :[" + id+ "]";
 
                    throw new DataAccessResourceFailureException(mensaje, e);
 
                }
 
            }
 
        }
 
    }
 
 
 
 
 
 
 
</pre>
 
<br>
 
  
 
== Ver también  ==
 
== Ver también  ==
 
 
*[[Oracle]]  
 
*[[Oracle]]  
 
*[[JDBC]]  
 
*[[JDBC]]  
 
*[[CLOB de Oracle]]  
 
*[[CLOB de Oracle]]  
 
*[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]  
*[http://download.oracle.com/docs/cd/E13222_01/wls/docs91/jdbc/thirdparty.html#1045809 Using Third-Party Drivers with WebLogic Server]
+
*[http://download.oracle.com/docs/cd/E13222_01/wls/docs91/jdbc/thirdparty.html#1045809 Using Third-Party Drivers with WebLogic Server]  
*[http://java.sun.com/j2se/1.5.0/docs/guide/jdbc/clob.html
+
*[http://java.sun.com/j2se/1.5.0/docs/guide/jdbc/clob.html Java Sun Clob Guide]
java Sun Clob Guide]
 
  
 
[[Category:Oracle]] [[Category:WebLogic]] [[Category:Java]]
 
[[Category:Oracle]] [[Category:WebLogic]] [[Category:Java]]

Revisión actual del 18:00 19 oct 2009

Si tenemos una aplicación Java corriendo en WebLogic la forma de acceder a un CLOB de Oracle para escritura se maneja de una forma especial. en nuestro caso utilizamos JDBC y por consiguiente la clase weblogic.jdbc.vendor.oracle.OracleThinClob. Aqui dejamos un ejemplo:

import java.io.IOException; import java.io.Writer; import java.sql.Clob; import java.sql.ResultSet; import java.sql.SQLException;

import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.support.JdbcDaoSupport;

import weblogic.jdbc.vendor.oracle.OracleThinClob;

import com.dosideas.dao.UnDao;

public class UnDaoImpl extends JdbcDaoSupport implements UnDao {

   /**
    * Query que busca el Clob por id.
    * SELECT ARCHIVO FROM TABLA_CON_ARCHIVO WHERE ID = ? FOR UPDATE;
    */
   private String query;
   /**
    * Obtiene el writer del Clob.
    */
   public Writer obtenerWriter(Long id) {
       Clob clobReporte = (Clob) getJdbcTemplate()
                              .queryForObject(getQuery(), 
                                new Object[] {idPeticion }, 
                                new RowMapper() {

public Object mapRow(ResultSet resultSet, int rowNum)

                                                                    throws SQLException {

return (Clob) resultSet.getClob(1);

                                 }
                           });
       Writer writerDelClob = null;

       try {
           writerDelClob = ((OracleThinClob) clobReporte).getCharacterOutputStream();
       } catch (SQLException e) {
           // Tratar el error
       }

return writerDelClob;

   }

Para realizar la Lectura de un CLOB de Oracle, usamos tambien JDBC, y como la clase weblogic.jdbc.vendor.oracle.OracleThinClob implementa la interfaz java.sql.Clob, utilizamos los metodos de esta ultima para obtener el contenido del CLOB. La funcion getSubString nos permite obtener desde la posicion del caracter que le indiquemos, una catidad determinada e caracteres. Con el metodo length, obtenemos el tamaño del CLOB, con lo cual podemos obtener todo el contenido, o recuperarlo por una cantidad fija de caracteres, asi como lo vemos en los siguientes ejemplos:

import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.sql.Clob; import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.support.JdbcDaoSupport; import com.tm.sera.dao.ClobReaderDao;


public class ClobReaderDaoImpl extends JdbcDaoSupport implements ClobReaderDao {

   /**
    * Query que busca el Clob por id. Por ejemplo: 
    * SELECT ARCHIVO FROM TABLA_CON_ARCHIVO WHERE ID = ?
    */
   private String query;
   /**
    * tamano del buffer de lectura del CLOB. Dependiendo de su tamano, la
    * cantidad de fetch que se realizan.
   */
   public int tamanoBuffer;


   public void leerYExportarClobexportar(OutputStream writerServlet, Long id) {
       Clob clobReporte = (Clob) getJdbcTemplate().queryForObject(getQuery(), 
                                                   new Object[] {id}, new RowMapper() {
           public Object mapRow(ResultSet resultSet, int rowNum) throws SQLException {
               return (Clob) resultSet.getClob(1);
           }
       });
       OutputStreamWriter osWriter = null;
       try {
           // Para escribir mas facil crea un buffer para escritura.
           osWriter = new OutputStreamWriter(writerServlet);
           long tamano = clob.length();
           long posDesde = 1;
           while (desde + tamanoBuffer < tamanoClob) {
               osWriter.write(clob.getSubString(posDesde, tamanoBuffer));
               posDesde += tamanoBuffer;
           }
           osWriter.write(clob.getSubString(posicionDesde, new Long(tamano - posDesde + 1).intValue()));
       } catch (SQLException e) {
           String mensaje = "Ocurrio un error al buscar CLOB por ID:[" + id + "]";
           throw new DataAccessResourceFailureException(mensaje, e);
       } catch (IOException e) {
           String mensaje = "Ocurrio un error al acceder al CLOB por ID:[" + id + "]";
           throw new DataAccessResourceFailureException(mensaje, e);
       } finally {
           if (osWriter != null) {
               try {
                   osWriter.close();
               } catch (IOException e) {
                   String mensaje = "Ocurrio un error al cerrar la conexion para lectura del CLOB ";
                   throw new DataAccessResourceFailureException(mensaje, e);
               }
           }
       }
   }

import java.io.IOException; import java.io.OutputStream; import java.sql.Clob; import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.support.JdbcDaoSupport; import com.tm.sera.dao.ClobReaderDao;


public class ClobReaderDaoImpl extends JdbcDaoSupport implements ClobReaderDao {

/**

* Query que busca el Clob por id. Por ejemplo:
* SELECT ARCHIVO FROM TABLA_CON_ARCHIVO WHERE ID = ?;
*/

private String query;

public void leerClob(Long id) {

 Clob clobReporte = (Clob) getJdbcTemplate().queryForObject(getQuery(), 
                                             new Object[] {id }, new RowMapper() {
     public Object mapRow(ResultSet resultSet, int rowNum) throws SQLException {
         return (Clob) resultSet.getClob(1);
     }
 });
 String contenidoClob = null;
 try {
     long tamanoClob = clob.length();
     contenidoClob = clob.getSubString(1, tamanoClob);
     System.out.println(contenidoClob);
 } catch (SQLException e) {
     String mensaje = "Ocurrio un error al buscar CLOB por ID:[" + id + "]";
     throw new DataAccessResourceFailureException(mensaje, e);
 } catch (IOException e) {
     String mensaje = "Ocurrio un error al acceder al CLOB por ID:[" + id + "]";
     throw new DataAccessResourceFailureException(mensaje, e);
 } finally {
     if (osWriter != null) {
         try {
             osWriter.close();
         } catch (IOException e) {
             String mensaje = "Ocurrio un error al cerrar la conexion para lectura del CLOB";
             throw new DataAccessResourceFailureException(mensaje, e);
         }
     }
 }

}

Ver también