miércoles, 8 de febrero de 2012

Modularización – Clase envoltorio para operaciones de BBDD


La modularización es un elemento clave en la programación orientada a objetos. Modularizar un proyecto consiste en ordenar los objetos(clases, atributos, métodos…) de forma que pueda ser más fácil de usar y entender para el resto de grupo de trabajo. Aquí juega un papel muy importante las clases envoltorio (Wrapper), las cuales engloban toda la funcionalidad de esa clase, por ejemplo, la clase Float, Integer, etc.
En los ejercicios de entradas anteriores, se usaban muchas funciones que manipulan la base de datos. Lo más útil sería hacer una clase que contenga todos las funciones que hacen uso de la base de datos. Este es el código que crea la clase MySQL:


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 *
 * @author Tarde
 */
public class MySQL {
 //ATRIBUTOS
 private Connection conn=null;
 private Statement stm=null;
 private ResultSet rst;
 private String bbdd="";
 private String ruta="";
 private String usuario="";
 private String password="";

 //CONSTRUCTOR
 public MySQL(String bbdd,String ruta,String usuario,String password){
 this.bbdd=bbdd;
 this.ruta=ruta;
 this.usuario=usuario;
 this.password=password;
 }

 public ResultSet getResultSet(){
 return this.rst;
 }

 public void inicializarBD(){
 try {
 //crear el driver
 Class.forName("com.mysql.jdbc.Driver").newInstance();
 //obtener el manejador
 // localhost, que en este caso es "prueba",
 //el usuario mysql es admin la password es adminadmin
 conn=DriverManager.getConnection("jdbc:mysql:"+ruta+"/"+bbdd,usuario,password);
//obtener el statement
 stm= conn.createStatement(); 

 }catch(SQLException err){
System.out.println("Error SQLException: "+err.getMessage() +"\n"+err.toString());
}catch(Exception e){
System.out.println(e.getMessage());
}
 }

 public void cerrarBD(){
 try {
 stm.close();
 if (conn!=null){
 conn.close();
 } 

 }catch(SQLException err){
System.out.println("Error SQLException: "+err.getMessage() +"\n"+err.toString());
}catch(Exception e){
System.out.println(e.getMessage());
}
 }

 public void consultar(String consulta){

 if(!consulta.equals("")){
 try{
 rst = stm.executeQuery(consulta);
 }catch(SQLException err){
 System.out.println("Error SQLException: "+err.getMessage() +"\n"+err.toString());
 }catch(Exception e){
 System.out.println(e.getMessage());
 }
 }
 }

 public int insertar(String consulta){

 int s=-1;

 try{
 if(!(consulta.equals(""))){
 s = stm.executeUpdate(consulta);
 }
 }catch(SQLException err){
System.out.println("Error SQLException: "+err.getMessage() +"\n"+err.toString());
}catch(Exception e){
System.out.println(e.getMessage());
}finally{
 return s; //Si es -1 es error del método insertar

 }
 }

 public int actualizar(String consulta){

 int s=-1;

 try{
 if(!(consulta.equals(""))){
 s = stm.executeUpdate(consulta);
 }
 }catch(SQLException err){
System.out.println("Error SQLException: "+err.getMessage() +"\n"+err.toString());
 s=-1;
}catch(Exception e){
System.out.println(e.getMessage());
 s=-1;
}finally{
 return s; //Si es -1 es error del método Actualizar

 }
 }

 public int borrar(String consulta){
 int s=-1;

 try{
 if(!(consulta.equals(""))){
 s = stm.executeUpdate(consulta);
 }
 }catch(SQLException err){
System.out.println("Error SQLException: "+err.getMessage() +"\n"+err.toString());
}catch(Exception e){
System.out.println(e.getMessage());
}finally{
 return s;
 }
 }

 public int contar(String consulta){
 int s=-1;

 try{
 if(!(consulta.equals(""))){
 rst = stm.executeQuery(consulta);
 if(rst.next()){
 s=rst.getInt(1);
 }
 }
 }catch(SQLException err){
System.out.println("Error SQLException: "+err.getMessage() +"\n"+err.toString());
}catch(Exception e){
System.out.println(e.getMessage());
}finally{
 return s;
 }
 }
}
Una vez hecho esto, ya se puede instanciar esta clase en el proyecto, para hacer diferentes tareas. Por ejemplo, para hacer el login, sería:
public int login(){
 int existe=0;
 try{
 MySQL mysql=new MySQL("flickr","//localhost","root", "forman");
mysql.inicializarBD();
//consulta
 mysql.consultar("SELECT idusuarios,rol FROM usuarios WHERE alias='"+alias+"' AND password='"+password+"' AND activado=1;");
 //ejecutar la consulta
 ResultSet rst = mysql.getResultSet();

 if(rst.next()){ //Existe
 existe=1;
 id=rst.getInt("idusuarios");
 }else{ //No existe
 id=-1;
 }
 mysql.cerrarBD();

 }catch(SQLException err){
 System.out.println("Error SQLException: "+err.getMessage() +"\n"+err.toString());
 }finally{
 return id;
 }
 }

No hay comentarios:

Publicar un comentario