Ver Mensaje Individual
  #11 (permalink)  
Antiguo 13/02/2008, 17:41
chcma
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Re: Clases para acceso a datos ??

Hola amigo,

Bueno, yo vengo de .NET, por lo que mi forma de pensar, por lo que he visto, es totalmente diferente a los de JAVA (En el tema de acceso a datos).

Mientras que en .NET tenemos las clases DataTable, DataSet, DataRow, etc... aqui en Java se carece de todo eso, que en mi opinión no estaría nada mal que tuvieran algo similar.

Te muestro el código de una clase que me hice para ir probando un poco el acceso a datos. Te voy a mostrar tres códigos. La capa de acceso a datos (Que es para mysql), la capa de negocio y la capa de presentacion.

Son pruebas que estoy haciendo, pero espero te oriente algo... cualquier cosa me comentas y seguimos hablando por aqui e intercambiando opiniones.


Clase de acceso a datos
Código:
import java.util.*;
import java.sql.*;

public class accesoBD {
	private String _cadenaCN, _usuarioBD, _claveBD;

	private Connection objCN;

	
//Constructores
	public accesoBD(){
		try{
			Class.forName("com.mysql.jdbc.Driver").newInstance();			
		}catch(Exception ex){
			System.out.println(ex);
		}
	}
	public accesoBD(String cadCn, String  usuarioBD, String claveBD){
		_cadenaCN = cadCn;
		_usuarioBD = usuarioBD;
		_claveBD = claveBD;
		try{
			Class.forName("com.mysql.jdbc.Driver").newInstance();
		}catch(Exception ex){
			System.out.println(ex);
		}
	}
	
	
	
// *** PROPIEDADES *** //
	public void set_cadenaCn(String cadCn){
		_cadenaCN = cadCn;
	}
	public String get_cadenaCn(){	
		return _cadenaCN;
	}
	
	public void set_usuarioBd(String usuarioBd){
		_usuarioBD = usuarioBd;
	}
	public String get_usuarioBd(){	
		return _usuarioBD;
	}
	
	public void set_claveBd(String claveBd){
		_claveBD = claveBd;
	}
	public String get_claveBd(){	
		return _claveBD;
	}
	
	
	// ******  FUNCIONES  ***//////
	public boolean realizarCN(){
		try{
			objCN = DriverManager.getConnection(_cadenaCN, _usuarioBD, _claveBD);
			return true;
		}catch(Exception Ex){
			System.out.println(Ex);
			return false;
		}		
	}
	public void cerrarCN(){
		try{
			objCN.close();
		}catch(Exception Ex){
			System.out.println(Ex);
		}
	}


	public boolean insertaSentencia(String tabla, Vector parametros){
		try{
			String cadCampos="", cadValores="";
			//Rellenar Cadenas
			int i=0;


			for(i=0; i < parametros.size(); i++){
				cadCampos += ((claseParametro)parametros.elementAt(i)).get_campo()+ ",";
				if(((claseParametro)parametros.elementAt(i)).get_tipo()=="string"){
					cadValores += "'" + ((claseParametro)parametros.elementAt(i)).get_valor()+ "',";	
				}else{
					//podria hacer +. comprobaciones, como si el dato está vacio.
					cadValores += ((claseParametro)parametros.elementAt(i)).get_valor()+ ",";
				}
			}
			//Quitamos la última ,
			cadCampos = cadCampos.substring(0, cadCampos.length()-1);
			cadValores = cadValores.substring(0, cadValores.length()-1);
			
			Statement s = objCN.createStatement();
			s.execute("insert into " + tabla + " (" + cadCampos + ") values(" + cadValores + ")");
			
			return true;
		}catch(Exception ex){
			System.out.println(ex);
			return false;			
		}
	}

	
	private ResultSet objRS;
	private Statement objSql;
	public String[][] devuelveSentencia(String sentenciaSQL){

		int contCampos, contRegistros;
		String datosSQL[][];
	
		try{
			objSql = objCN.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                    							ResultSet.CONCUR_UPDATABLE);
			objRS =  objSql.executeQuery(sentenciaSQL);
			//Para Recuperar los datos de la estructura de la tabla.
			ResultSetMetaData objMD = objRS.getMetaData();
			contCampos = objMD.getColumnCount();
			
			
			contRegistros = 3;//objRS.getRow()+2; //+1 3
			datosSQL = new String[contRegistros][contCampos];
			
			
			try{
				//Meto los datos en el Array
				int j=0;
				while(objRS.next()){
					for(int i=1; i<contCampos; i++){
						datosSQL[j][i]=objRS.getString(i).toString();
					}
					j++;
				}				
			}catch(Exception exx){
				System.out.println("FALLA AQUI" + exx);
				return null;
			}
			
		
						
			cerrarCN();
			return datosSQL;
		}catch(Exception ex){
			return null;
		}
	}
	
}


CAPA DE NEGOCIO
Código:
import java.util.*;

public class claseNegocio {
	accesoBD objBD;
	Vector parametros;
	
	public boolean insertarEmpleado(String tabla, String nombre, String apellidos, 
					String dni, String nacimiento, String departamento,
					String sueldo){
			
		
		parametros = new Vector();
		parametros.add(new claseParametro("nombre", nombre, "string"));
		parametros.add(new claseParametro("apellidos", apellidos, "string"));
		parametros.add(new claseParametro("dni", dni, "string"));
		parametros.add(new claseParametro("nacimiento", nacimiento, "string"));
		parametros.add(new claseParametro("departamento", departamento, "int"));
		parametros.add(new claseParametro("sueldo", sueldo, "string"));
		
		
		if(objBD == null){
			objBD = new accesoBD("jdbc:mysql://localhost/bdempresa", "root", "1982norma");
		}
		if (!objBD.realizarCN()){
			return false;
		}
		if (!objBD.insertaSentencia(tabla, parametros)){
			return false;
		}
		
		return true;
	}
	
	
	public String[][] mostrarEmpleados(String sentenciaSQL){
		String tbDatos[][];
		
		if(objBD == null){
			objBD = new accesoBD("jdbc:mysql://localhost/bdempresa", "root", "1982norma");
		}
		if (!objBD.realizarCN()){
			return null;
		}
		
		tbDatos = objBD.devuelveSentencia(sentenciaSQL);
		return tbDatos;
	}
	
}


CAPA PRESENTACION
Código:
import java.util.*;
import java.sql.*;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Vector;

public class clasePresentacion {
	private static int opcion=9;
	private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	private static claseNegocio objNegocio = new claseNegocio();
	
	
	private static String nombre, apellidos, dni, nacimiento, sueldo, departamento;
	public static void main(String args[]){
		try{
			while( opcion!=0 ){
				muestraMenu();
				opcion = Integer.parseInt(br.readLine());
				System.out.println("\n\n\n");
				ejecutaOpcion();
				
			}	
		}catch(Exception ex){
			System.out.println(ex);
		}
	}
	
	
	private static void muestraMenu(){
		System.out.println("*********************************");
		System.out.println("*   1-. Insertar Empleado.      *");
		System.out.println("*   2-. Modificar Empleado.     *");
		System.out.println("*   4-. Mostrar Empleados BD.   *");
		System.out.println("*   0-. Salir                   *");
		System.out.println("*********************************");
		System.out.println("\n\nIntroducir Opción: ");
	}


	private static void ejecutaOpcion() throws Exception{
		switch(opcion){
			case 1:
				System.out.println("\nIntroduce Nombre:");
				nombre = br.readLine();
				System.out.println("\nIntroduce Apellidos:");
				apellidos = br.readLine();
				System.out.println("\nIntroduce Dni:");
				dni = br.readLine();
				System.out.println("\nIntroduce Nacimiento:");
				nacimiento = br.readLine();
				System.out.println("\nIntroduce Departamento:");
				departamento = br.readLine();
				System.out.println("\nIntroduce Sueldo:");
				sueldo = br.readLine();
				if (objNegocio.insertarEmpleado("templeados", nombre, apellidos, dni,
											 nacimiento, departamento, sueldo)){
					System.out.println("\n\n\n \" USUARIO INSERTADO \" \n\n\n");
				}
				break;
				
				
			case 4:
				String tbDatos[][];
				tbDatos = objNegocio.mostrarEmpleados("select * from templeados");
				int i, j;
				for(i=0; i<tbDatos.length-1; i++){
					for(j=1; j<tbDatos[i].length; j++){
						System.out.println(tbDatos[i][j]);
					}
					System.out.println("\n\n");
				}
				 
				//System.out.println(rs.getArray(1).toString());
		}
	}
}


CLASE ADICIONAL
Código:
public class claseParametro {	
	private String _campo, _valor, _tipo;
	
	
	public claseParametro(String campo, String valor, String tipo){
		_campo = campo;
		_valor = valor;	
		_tipo = tipo;
	}
	
	
	
	// ***  PROPIEDADES  ***
	public void set_campo(String campo){
		_campo = campo;
	}
	public String get_campo(){
		return _campo;
	}
	
	
	
	public void set_valor(String valor){
		_valor = valor;
	}
	public String get_valor(){
		return _valor;
	}
		
	
	
	public void set_tipo(String tipo){
		_valor = tipo;
	}
	public String get_tipo(){
		return _tipo;		
	}
}

Te explico:

La capa de acceso a datos, se supone que hará la conexión y ejecución primitiva a la base de datos.

La capa de negocio es donde implementamos los métodos de conseguir datos, o insertar datos para una tabla especifica, dejando la tarea de los INSERT a la capa de acceso a datos. De este metodo, si cambiamos de servidor de BD con cambiar la capa de acceso a datos lo tendriamos resuelto.

La capa de presentación es donde usamos la capa de negocio.

La clase adicional que meti, es una clase "sucia" en la cual sirve como contenedora de los parametros que se pasarán a los procedimientos almacenados o consultas de la clase de acceso a datos.

Hechale un ojo, estudialo y luego si te parece hablamos.

Un saludo.
__________________
Charlie.