Mapeo Manual de objetos a base de datos Parte II b

205 views
Skip to first unread message

Edwin Ilovares

unread,
Sep 11, 2013, 7:03:28 PM9/11/13
to apunte...@googlegroups.com

Continuamos con la segunda parte de este intento de manual.

 

En la entrega anterior había terminado con el método QueryRows,ahora QueryRow es muy parecido, en este en lugar de devolver un ArrayList, únicamente retornamos un objeto del tipo dominio.

 

@Override
    public <T> T QueryRow(StringBuilder sentencia, Object[] parametros, Class<T> dominio, String[] propiedades) throws SQLException {
        if (conexion != null) {
            ResultSet rs = null;
            PreparedStatement ps = null;
            T objResultado = null;
            try {
                if (automatico) {
                    AbrirConexion();
                }
                ps = conexion.prepareStatement(sentencia.toString());
                for (int i = 0; i < parametros.length; i++) {//Agregar a statement los parametros
                    ps.setString(i + 1, parametros[i] != null ? parametros[i].toString() : null);
                }
                rs = ps.executeQuery();//Ejecutar consulta
                ResultSetMetaData rsMetaData = rs.getMetaData();
                int numberOfColumns = rsMetaData.getColumnCount();

if (rs.next()) {
                    objResultado = dominio.newInstance();//Crear un objeto del tipo dominio
                    for (int i = 0; i < numberOfColumns; i++) {
                        //setear el valor de cada columna en las propiedad
                        PropertyUtils.setProperty(objResultado, propiedades[i], rs.getObject(i + 1));
                    }
                }
            } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException ex) {
                throw new SQLException("Imposible realizar consulta=>" + ex.getMessage());
            }
            rs.close();
            ps.close();
            if (automatico) {
                CerrarConexion();
            }
            return objResultado;
        } else {
            throw new SQLException("No existe Conexion. Favor llemar funcion AbrirConexion().");
        }
    }

Los métodos de Update, Insert y Delete son prácticamente lo mismo, por eso en la primera parte mencionaba que yo lo utilizo como uno solo.

 

@Override
    public boolean Update(StringBuilder sentencia, Object[] sqlStatement) throws SQLException {
        if (conexion != null) {
            if (automatico) {
                AbrirConexion();
            }
            CallableStatement cs = conexion.prepareCall(sentencia.toString());
            for (int i = 0; i < sqlStatement.length; i++) {
                cs.setString(i + 1, sqlStatement[i] != null ? sqlStatement[i].toString() : null);
            }
            cs.execute();
            cs.close();
            if (automatico) {
                CerrarConexion();
            }
            return true;
        } else {
            throw new SQLException("No existe Conexion. Favor llemar funcion AbrirConexion().");
        }
    }

Con esto terminamos la abstracción en la siguiente veremos cómo trabajar con la clase SetUp y vamos hacer algunas pruebas. Dejo el código completo de la clase.

 

 

public class Crud extends SetUp implements TransacionImpl {

private Connection conexion = null;
    private String _ClassForName;//para manejar el driver de conexion
    private boolean automatico = false;

public Connection CerrarConexion() throws SQLException {
        automatico = false;
        if (conexion != null) {
            conexion.close();
        }
        return conexion;
    }

public Connection AbrirConexion() throws SQLException {
        try {
            automatico = false;
            Class.forName(this._ClassForName).newInstance();
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
            throw new SQLException("Imposible abrir Conexion=>" + ex.getMessage());
        }
        conexion = DriverManager.getConnection(this.getUrl(), this.getUsuario(), this.getClave());
        return conexion;
    }

public void ConexionAutomatica() throws SQLException {
        try {
            automatico = true;
            Class.forName(this._ClassForName).newInstance();
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
            throw new SQLException("Imposible abrir Conexion=>" + ex.getMessage());
        }
        conexion = DriverManager.getConnection(this.getUrl(), this.getUsuario(), this.getClave());
    }

@Override
    public <T> ArrayList<T> QueryRows(StringBuilder sentencia, Object[] parametros, Class<T> dominio, String[] propiedades) throws SQLException {
        if (conexion != null) {
            ResultSet rs = null;
            PreparedStatement ps = null;
            ArrayList<T> listaResultado = new ArrayList<>();
            try {
                if (automatico) {
                    AbrirConexion();
                }
                ps = conexion.prepareStatement(sentencia.toString());
                for (int i = 0; i < parametros.length; i++) {//Agregar a statement los parametros
                    ps.setString(i + 1, parametros[i] != null ? parametros[i].toString() : null);
                }
                rs = ps.executeQuery();//Ejecutar consulta
                ResultSetMetaData rsMetaData = rs.getMetaData();
                int numberOfColumns = rsMetaData.getColumnCount();

while (rs.next()) {
                    T beanme = dominio.newInstance();//Crear un objeto del tipo dominio
                    for (int i = 0; i < numberOfColumns; i++) {
                        //setear el valor de cada columna en las po
                        PropertyUtils.setProperty(beanme, propiedades[i], rs.getObject(i + 1));
                    }
                    listaResultado.add(beanme);
                }
            } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException ex) {
                throw new SQLException("Imposible realizar consulta=>" + ex.getMessage());
            }
            rs.close();
            ps.close();
            if (automatico) {
                CerrarConexion();
            }
            return listaResultado;
        } else {
            throw new SQLException("No existe Conexion. Favor llemar funcion AbrirConexion().");
        }
    }

@Override
    public <T> T QueryRow(StringBuilder sentencia, Object[] parametros, Class<T> dominio, String[] propiedades) throws SQLException {
        if (conexion != null) {
            ResultSet rs = null;
            PreparedStatement ps = null;
            T objResultado = null;
            try {
                if (automatico) {
                    AbrirConexion();
                }
                ps = conexion.prepareStatement(sentencia.toString());
                for (int i = 0; i < parametros.length; i++) {//Agregar a statement los parametros
                    ps.setString(i + 1, parametros[i] != null ? parametros[i].toString() : null);
                }
                rs = ps.executeQuery();//Ejecutar consulta
                ResultSetMetaData rsMetaData = rs.getMetaData();
                int numberOfColumns = rsMetaData.getColumnCount();

if (rs.next()) {
                    objResultado = dominio.newInstance();//Crear un objeto del tipo dominio
                    for (int i = 0; i < numberOfColumns; i++) {
                        //setear el valor de cada columna en las po
                        PropertyUtils.setProperty(objResultado, propiedades[i], rs.getObject(i + 1));
                    }
                }
            } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException ex) {
                throw new SQLException("Imposible realizar consulta=>" + ex.getMessage());
            }
            rs.close();
            ps.close();
            if (automatico) {
                CerrarConexion();
            }
            return objResultado;
        } else {
            throw new SQLException("No existe Conexion. Favor llemar funcion AbrirConexion().");
        }
    }

@Override
    public boolean Update(StringBuilder sentencia, Object[] sqlStatement) throws SQLException {
        if (conexion != null) {
            if (automatico) {
                AbrirConexion();
            }
            CallableStatement cs = conexion.prepareCall(sentencia.toString());
            for (int i = 0; i < sqlStatement.length; i++) {
                cs.setString(i + 1, sqlStatement[i] != null ? sqlStatement[i].toString() : null);
            }
            cs.execute();
            cs.close();
            if (automatico) {
                CerrarConexion();
            }
            return true;
        } else {
            throw new SQLException("No existe Conexion. Favor llemar funcion AbrirConexion().");
        }
    }

@Override
    public boolean Insert(StringBuilder sentencia, Object[] sqlStatement) throws SQLException {
        if (conexion != null) {
            if (automatico) {
                AbrirConexion();
            }
            CallableStatement cs = conexion.prepareCall(sentencia.toString());
            for (int i = 0; i < sqlStatement.length; i++) {
                cs.setString(i + 1, sqlStatement[i] != null ? sqlStatement[i].toString() : null);
            }
            cs.execute();
            cs.close();
            if (automatico) {
                CerrarConexion();
            }
            return true;
        } else {
            throw new SQLException("No existe Conexion. Favor llemar funcion AbrirConexion().");
        }
    }

@Override
    public boolean Delete(StringBuilder sentencia, Object[] sqlStatement) throws SQLException {
        if (conexion != null) {
            if (automatico) {
                AbrirConexion();
            }
            CallableStatement cs = conexion.prepareCall(sentencia.toString());
            for (int i = 0; i < sqlStatement.length; i++) {
                cs.setString(i + 1, sqlStatement[i] != null ? sqlStatement[i].toString() : null);
            }
            cs.execute();
            cs.close();
            if (automatico) {
                CerrarConexion();
            }
            return true;
        } else {
            throw new SQLException("No existe Conexion. Favor llemar funcion AbrirConexion().");
        }
    }
}

Reply all
Reply to author
Forward
0 new messages