Diferencia entre revisiones de «CLOB de Oracle en Weblogic»

De Dos Ideas.
Saltar a: navegación, buscar
(Ver también)
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>
+
<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>
+
<br>  
<pre>
+
<pre>import java.io.IOException;
 
 
import java.io.IOException;
 
 
import java.io.OutputStream;
 
import java.io.OutputStream;
 
import java.io.OutputStreamWriter;
 
import java.io.OutputStreamWriter;
Línea 74: Línea 72:
 
     /**
 
     /**
 
     * Query que busca el Clob por id.
 
     * Query que busca el Clob por id.
     * SELECT ARCHIVO FROM TABLA_CON_ARCHIVO WHERE ID = ? ;
+
     * SELECT ARCHIVO FROM TABLA_CON_ARCHIVO WHERE ID =&nbsp;?&nbsp;;
 
     */
 
     */
 
     private String query;
 
     private String query;
Línea 87: Línea 85:
 
     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 98:
 
             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 116:
  
 
         } 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 126:
 
         }
 
         }
 
     }
 
     }
 
 
 
  
  
  
 
</pre><pre>
 
</pre><pre>
 
 
import java.io.IOException;
 
import java.io.IOException;
 
import java.io.OutputStream;
 
import java.io.OutputStream;
Línea 143: Línea 138:
 
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.
 
  * Implementacion usando un Clob de oracle.
 
  */
 
  */
public class ClobReaderDaoImpl extends JdbcDaoSupport implements ClobReaderDao {
 
  
    /**
 
    * Query que busca el Clob por id.
 
    * SELECT ARCHIVO FROM TABLA_CON_ARCHIVO WHERE ID = ? ;
 
    */
 
    private String query;
 
 
   
 
    public void leerClob(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);
 
            }
 
        });
 
  
        String contenidoClob = null;
 
  
        try {
+
public class ClobReaderDaoImpl extends JdbcDaoSupport implements ClobReaderDao {
            long tamanoClob = clob.length();
+
  /**
 +
    * Query que busca el Clob por id.
 +
    * SELECT ARCHIVO FROM TABLA_CON_ARCHIVO WHERE ID =&nbsp;?&nbsp;;
 +
    */
 +
  private String query;
  
            contenidoClob = clob.getSubString(1, tamanoClob);
 
            System.out.println(contenidoClob);
 
  
 +
    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);
 +
          }
 +
      });
  
        } catch (SQLException e) {
+
      String contenidoClob = null;
  
            String mensaje = "Ocurrio un error al buscar CLOB por ID:[" + id + "]";
+
      try {
            throw new DataAccessResourceFailureException(mensaje, e);
+
          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&nbsp;!= 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);
 +
              }
 +
          }
 +
      }
 +
  }
  
        } catch (IOException e) {
 
            String mensaje = "Ocurrio un error al acceder al CLOB por ID:[" + id + "]";
 
            throw new DataAccessResourceFailureException(mensaje, e);
 
  
        } finally {
+
</pre>  
            if (osWriter != null) {
+
<br>  
                try {
 
                    osWriter.close();
 
                } catch (IOException e) {
 
                    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  ==
Línea 207: Línea 199:
 
*[[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 del 04:39 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;

/**
* Implementacion usando un Clob de oracle.
*/
public class ClobReaderDaoImpl extends JdbcDaoSupport implements ClobReaderDao {

    /**
     * Query que busca el Clob por id.
     * 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;


/**

* Implementacion usando un Clob de oracle.
*/


public class ClobReaderDaoImpl extends JdbcDaoSupport implements ClobReaderDao {

 /**
   * Query que busca el Clob por id.
   * 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

java Sun Clob Guide]