Foros del Web » Programación para mayores de 30 ;) » Java »

JSP+ MySql

Estas en el tema de JSP+ MySql en el foro de Java en Foros del Web. Hola a todos, estoy trtabajando sobre un sistema que debe accesar constantemente a una base de datos, me estan pidiendo que maneje una clase ((ConexionDB)), ...
  #1 (permalink)  
Antiguo 26/08/2009, 11:20
Avatar de Rod_Man_mx  
Fecha de Ingreso: agosto-2009
Mensajes: 69
Antigüedad: 14 años, 8 meses
Puntos: 4
JSP+ MySql

Hola a todos,
estoy trtabajando sobre un sistema que debe accesar constantemente a una base de datos, me estan pidiendo que maneje una clase ((ConexionDB)), que sea accesado mediante un JSP, no tengo problema con dar de alta, o baja los campos que llegue a necesitar, el problema que se me presenta es al momento de hacer un query, ya que el ResultSet me da el String de la columna que esty buscando, sin embargo, ya que estoy usando una clase directamente, y ya que esto es un Bean, quisiera hacerlo un poco mas de forma generica, lo que he estado haciendo es algo asi:


public class ConexionDB {
public String error = " ";
public Connection con= null;
public Statement stt = null;
public ResultSet rSet = null;

public ConexionDB(){
super();
}

public boolean ConexionExitosa(){
boolean resp = false;
try{
Class.forName("org.gjt.mm.mysql.Driver").newInstan ce();
this.con = DriverManager.getConnection("jdbc:mysql://localhost/base","usr","pswd");
resp = true;
this.error = "Conexion exitosa!";

} catch(Exception e){
this.error = "Error al conectar debido a: \n" + e ;
}
return resp;
}

public String busca(String query, String campo){
String resSet = " ";
String acum = " ";
if(ConexionExitosa()){
try{
this.stt = this.conCat.createStatement();
rSet = stt.executeQuery(query);
while(rSet.next()){
resSet = rSet.getObject(campo).toString() + "\n";
acum = acum +resSet;
}
this.stt.close();
this.conCat.close();
} catch(Exception e){
this.error = "No se pudo llevar a cabo la busqeda debido a: " + e;
}
} return acum;
}

}

El problema que veo aqui, es que de querer manejarlo de esta forma, tendre que crear un metodo que reciba n cantidad de campos, y no creo que la cosa vaya por ahi, la pregunta es ¿hay alguna forma de que pueda hacer el query independientemente de la cantidad de campos que necesite enviar y desplegarlos directamente en el JSP?
  #2 (permalink)  
Antiguo 26/08/2009, 13:00
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: JSP+ MySql

Hola:

Puedes acceder a los campos por su índice y no por el nombre. El índice empieza en 1.

Para saber cual es el nombre del campo o cuántos campos hay en un ResultSet, llama a su método getMetaData(). El ResultSetMetaData que obtienes tiene métodos para interrogar sobre cuántos campos hay, cuales son sus nombres y tipos, etc.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 27/08/2009, 10:57
Avatar de Rod_Man_mx  
Fecha de Ingreso: agosto-2009
Mensajes: 69
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: JSP+ MySql

Muchas gracias por la sugerencia, y de hecho funciona bastante bien para una sola abla, aqui lo complicado es que no solo voy a accesar a una sola tabla mediante el query, mi idea es armar este mismo desde el jsp y mandarlo al bean, o bien mandarl los datos a un servlet, y desde el servlet leer los datos desde el bean ((esto ultimo depende mucho de que sea lo que me pidan)), aqui mi duda es ¿como saco todos los datos del ResultSet para ser desplegados en pantalla directamente en el JSP? o ya hay algun framework que me pueda ayudar con todo esto?
  #4 (permalink)  
Antiguo 28/08/2009, 01:19
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: JSP+ MySql

Hola:

Si la consulta trae un ResultSet con campos de varias tablas, el ResultSetMetaData los trata todos igualemente. El problema que puedes tener es que no sepas identificar de qué tabla es cada campo.

Aquí tienes un ejemplo en el que se usa ResultSetMetaData para meterlos el resultado, sin tener ni idea de qué es, en un JTable. Funciona aunque el SELECT traiga campos de varias tablas, siempre y cuando esos campos no se llamen igual en las dos tablas.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 28/08/2009, 10:26
Avatar de Rod_Man_mx  
Fecha de Ingreso: agosto-2009
Mensajes: 69
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: JSP+ MySql

Muchas gracias, me ha sido de bastante utilidad todo esto, les dejo el codigo que salio despues de todo esto por si me pueden sugerir algo, o si alguien se enfrenta al mismo problema que yo:

Código:
public class ConexionDB {
    public String error = " ";
    public Connection con = null;
    public Statement stt = null;
    public ResultSet rSet = null;
   
    public ConexionDB(){
        super();
    }

    public boolean ConexionExitosa(){
        boolean resp = false;
        try{
            Class.forName("org.gjt.mm.mysql.Driver").newInstance();
            this.con = DriverManager.getConnection("jdbc:mysql://localhost/catalogo","root","root");
            resp = true;
            this.error = "Conexion exitosa!";
            
        } catch(Exception e){
            this.error = "Error al conectar debido a: \n" + e ;
        }
        return resp;
    }

    public DefaultTableModel busca(String query){
         int numCols = 0;
         DefaultTableModel modelo = new DefaultTableModel();
         ResultSetMetaData metaData = null;
         int i;

        if(ConexionExitosa()){
            try{
                this.stt = con.createStatement();
                rSet = stt.executeQuery(query);
                metaData = rSet.getMetaData();
                numCols = metaData.getColumnCount();
                Object [] etiquetas = new Object[numCols];
                Object [] fila = new Object[numCols];
                for( i = 0; i < numCols; i++){
                    etiquetas[i] = metaData.getColumnLabel(i+1);
                }
                modelo.setColumnIdentifiers(etiquetas);
                while(rSet.next()){
                    for(i = 0; i < numCols ; i++){
                         fila[i] = rSet.getObject(i+1);
                    }
                    modelo.addRow(fila);
                }
           } catch(Exception e){
                this.error = "no se pudo realizar la busqeda debido a " + e;
            }

        }
        return modelo;
    }
}
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:13.