Handler Oracle (Java)

Entrada corta para compartir una Clase que hice y hasta ahora me ha servido en todos los sistemas que he hecho que ocupen Oracle como DB.

Básicamente la instancias, mandas el SQL, los parametros y listo !

package Modelos;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;

/**
 *
 * @author mcares
 */
public class HandlerOracle {
    private String Host = "10.0.0.1",
            Port = "1551",
            User = "usuario",
            Pass = "pass",
            BD = "bd",
            Driver = "oracle.jdbc.driver.OracleDriver";
    public String mensaje = "";
    protected Connection conexion;

    private Connection Conectar()
            throws Exception{
        StringBuilder url = new StringBuilder();
        url.append("jdbc:oracle:thin:@//").
                append(this.Host).append(":").
                append(this.Port).append("/").append(this.BD);
        Class.forName(Driver);
        return DriverManager.getConnection(
                url.toString(),
                this.User,
                this.Pass);
    }

    public HandlerOracle() {
        try {
            conexion = this.Conectar();
            System.out.println("Conectado a Oracle en " + conexion.isValid(100));
        } catch (Exception ex) {
            System.out.println(HandlerOracle.class.getName() + " " + Level.SEVERE + " " + ex.toString());
        }
    }

    public List<Map<String, Object>> ExeSelect(String sql, List<Object> parametros){
        return this.Select(sql, parametros);
    }

    private List<Map<String, Object>> Select(String sql, List<Object> parametros){
        try {
            PreparedStatement pstmt = conexion.prepareStatement(sql);
            int count = 1;
            for(Object p : parametros){
                if(p.getClass().equals(String.class)){
                    pstmt.setString(count, (String)p);
                }else if(p.getClass().equals(Integer.class)){
                    pstmt.setInt(count, (Integer)p);
                }else if(p.getClass().equals(Boolean.class)){
                    pstmt.setBoolean(count, (Boolean)p);
                }else if (p.getClass().equals(Date.class)){
                    pstmt.setDate(count, (Date) p);
                }
                count++;
            }
            pstmt.executeQuery();
            ResultSet rs = pstmt.getResultSet();
            ResultSetMetaData rsmd = rs.getMetaData();
            List<Map<String, Object>> response = new ArrayList<Map<String, Object>>();
            while(rs.next()){
                Map<String, Object> fila = new HashMap<String, Object>();
                for(int c = 0; c < rsmd.getColumnCount(); c++){
                    fila.put(rsmd.getColumnLabel(c+1), rs.getObject(c+1));
                }
                response.add(fila);
            }
            pstmt.close();
            conexion.close();
            return response;
        } catch (SQLException sqex) {
            System.out.println(HandlerOracle.class.getName() + " " + Level.SEVERE + " " + sqex.toString());
            mensaje = "Error en Select: " +
                    HandlerOracle.class.getName() + " " + Level.SEVERE + " " + sqex.toString();
            return null;
        }
    }
}

Por parte:

  1. Parámetros iniciales
  2. Función conectar con los parámetros
  3. Constructor por defecto
  4. Función pública para obtener el select. Como parámetro, ocupa el SQL y los parámetros en una List de Object. Devuelve una List con un Map que contiene el key con nombre de la columna, y value con el contenido de la columna.
  5. Aquí ocurre la magia. Recorremos todos los items en parametros y revisamos el tipo de dato. Como ven, pueden mandar String, Integer, Boolean o Date. Obviamente, pueden ingresar más tipos de datos que maneje la BD.
  6. Una vez que tenemos la sentencia parametrizada lista, la ejecutamos. Y del resultado lo recorremos y guardamos el nombre de la columna y el valor de ésta.
  7. Lo guardamos en un Map y posteriormente enviamos a un List.
  8. Devolvemos y se acabó🙂

Para agregar un Insert, Update, Delete, etc. es cosa de tomar el mismo camino al parametrizar y eso sería todo😀

Acerca de MaritoCares

Ingeniero Informático. Con tendencias a la programación en [C#, VB].NET, Java(Web principalmente...), PHP, JavaScript, algo mínimo de [ruby, python], y el clásico C.
Esta entrada fue publicada en Java, Oracle, Tips. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s