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

guardar en un array consulta sql

Estas en el tema de guardar en un array consulta sql en el foro de Java en Foros del Web. Hola a todos, mi problema es que quiero rellenar una tabla con datos adquiridos mediante consultas de una base de datos. Vamos que tengo una ...
  #1 (permalink)  
Antiguo 01/06/2010, 05:25
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 14 años
Puntos: 1
guardar en un array consulta sql

Hola a todos,

mi problema es que quiero rellenar una tabla con datos adquiridos mediante consultas de una base de datos. Vamos que tengo una base de datos con los nombres, edad, dni de personas...y quiero que mediante una consulta, poder rellenar una tabla.

Para eso habia pensado en guardarme el resultado de la consulta select en un array y asi luego poder trabajar con ese array para rellenar la tabla.

Sabeis como se puede hacer?

En principio me habia creado un metodo consultor getNombres() que me devolviera una array con la lista de nombres que le he hecho con el select, y asi luego poder llamar a ese getNombres desde otras clases para poder rellenar la tabla con esos nombres...

Para conectarme a la bb.dd:

Cita:
try{
Class.forName("com.mysql.jdbc.Driver");
Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost/gestion_campeonatos", "root", "tomorrow");
PreparedStatement consulta1 = conexion.prepareStatement("select nombre from judokas");
ResultSet result1 = consulta1.executeQuery();
while(result1.next()){
//Y AQUI ES DONDE TENGO QUE HACER ALGO CON LA CONSULTA.
}
catch(...)

....
  #2 (permalink)  
Antiguo 02/06/2010, 13:17
 
Fecha de Ingreso: mayo-2010
Ubicación: Chilpancingo, Gro
Mensajes: 25
Antigüedad: 14 años
Puntos: 0
Respuesta: guardar en un array consulta sql

el result1.next te devuelve la fila de la consulta ejemplo:

1.- juan - 23 - X
2.- miguel - 25 -Y

el método es result1.getString(numColumna)

numColumna=1 (regresa "juan")
numColumna=2 (regresa "23")
numColumna=3 (regresa "X")

asi que si quieres usar un arreglo(que no veo el porque lo quieres hacer, jejej) ps declaras un arreglo y metes los datos :D

while(resul.next)
{
for(i=0;i<nColums;i++)
{
miArreglo[i]=resul.getString(i+1);
}
}

algo así... saludos
  #3 (permalink)  
Antiguo 02/06/2010, 14:06
 
Fecha de Ingreso: mayo-2010
Mensajes: 27
Antigüedad: 14 años
Puntos: 1
Respuesta: guardar en un array consulta sql

Hola!
Bueno, lo que puedes hacer es guardar los datos en un ArrayList

Código PHP:
//Puedes usar genericidad también si lo quieres más específico.

ArrayList lista=new ArrayList()

try{
Class.
forName("com.mysql.jdbc.Driver");
Connection conexion DriverManager.getConnection("jdbc:mysql://localhost/gestion_campeonatos""root""tomorrow");
PreparedStatement consulta1 conexion.prepareStatement("select nombre from judokas");
ResultSet result1 consulta1.executeQuery();
while(
result1.next()){

// Lo que va entre comillas es el nombre del campo de tu bd
String nombreresult1.setString("nombre");

//Creas un objeto del tipo que te estas trayendo de la bd

judokas k=new judokas(nombre);//le mandas los parametros necesarios al constructor
lista.add(k); //agregas ese objeto a la lista
}
return 
lista;
}catch(...) 
espero te sirva saludos
  #4 (permalink)  
Antiguo 03/06/2010, 01:47
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 14 años
Puntos: 1
Respuesta: guardar en un array consulta sql

Gracias haruchan.

Pero no he entendido lo del constructor..

Cita:
//Creas un objeto del tipo que te estas trayendo de la bd

judokas k=new judokas(nombre);//le mandas los parametros necesarios al constructor
No tengo ningun objeto de ese tipo...deberia? judokas es una tabla de la base de datos, de donde me voy a traer(y poner) informacion...


Aparte me da error en String nombre= result1.setString("nombre");
  #5 (permalink)  
Antiguo 03/06/2010, 08:05
 
Fecha de Ingreso: mayo-2010
Mensajes: 27
Antigüedad: 14 años
Puntos: 1
Sonrisa Respuesta: guardar en un array consulta sql

Bueno, deberías revisar qué tipo de dato es el que te traes de la bd. Si te sale un error probablemente sea que te estás trayendo es un entero, si es así, entonces no sería result1.setString sino result1.getInt("tu_nombre_de_campo").

Lo del constructor te lo decía por si estabas trabajando MVC, donde tienes una clase que solo tiene constructor, get y set por cada tabla que tengas en la bd. (Beans).

Ejemplo, si yo tengo una tabla "Persona", y sus respectivas clases bean, y quiero traerme una lista de objetos de tipo Persona, hago lo siguiente:


Bean Persona:

Código PHP:
public class Persona {

    private 
int codigo;
    private 
String nombre;
    private 
String apellido;

    public 
Persona(int codigoString nombreString apellido) {
        
this.codigo codigo;
        
this.nombre nombre;
        
this.apellido apellido;
    }

    
/**
     * @return the codigo
     */
    
public int getCodigo() {
        return 
codigo;
    }

    
/**
     * @param codigo the codigo to set
     */
    
public void setCodigo(int codigo) {
        
this.codigo codigo;
    }

    
/**
     * @return the nombre
     */
    
public String getNombre() {
        return 
nombre;
    }

    
/**
     * @param nombre the nombre to set
     */
    
public void setNombre(String nombre) {
        
this.nombre nombre;
    }

    
/**
     * @return the apellido
     */
    
public String getApellido() {
        return 
apellido;
    }

    
/**
     * @param apellido the apellido to set
     */
    
public void setApellido(String apellido) {
        
this.apellido apellido;
    }
    


Esta sería el método de la clase donde esta la consulta:

Código PHP:

public ArrayList getPersona() {
ArrayList lista=new ArrayList();
try{
Class.
forName("com.mysql.jdbc.Driver");
Connection conexion DriverManager.getConnection("jdbc:mysql://localhost/gestion_campeonatos""root""tomorrow");
PreparedStatement consulta1 conexion.prepareStatement("select codigo,nombre,apellido from Persona");
ResultSet result1 consulta1.executeQuery();
while(
result1.next()){
int codigoresult1.setInt("codigo");
String nombreresult1.setString("nombre");
String apellidoresult1.setString("apellido");

//Creas un objeto del tipo que te estas trayendo de la bd, en mi caso, un objeto Persona

Persona k=new Persona(codigo,nombre,apellido);//le mandas los parametros necesarios al constructor del Bean Persona. 

lista.add(k); //agregas ese objeto a la lista
}
return 
lista;
}catch(...)

Cita:
No tengo ningun objeto de ese tipo...deberia? judokas es una tabla de la base de datos, de donde me voy a traer(y poner) informacion...
Si usas MVC, es recomendable que tengas una clase con los atributos de judokas, así te será más fácil manipular los elementos que te traigas o que insertes allá en la bd.

Saludos
  #6 (permalink)  
Antiguo 03/06/2010, 13:52
 
Fecha de Ingreso: mayo-2010
Ubicación: Chilpancingo, Gro
Mensajes: 25
Antigüedad: 14 años
Puntos: 0
Respuesta: guardar en un array consulta sql

Hola haruchan, una correción, el error que manda es por que el método que llamas del resultset "result1.setString('Columna')"... no existe... el metodo es "result1.getString("nom_columna") ó result1.getString(numColumna). aquí dejo un link con los metodos que tiene el resultSet

http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSet.html

me parece que andas algo confundido con el bean. Saludos! y espero no moleste mi comentario...
  #7 (permalink)  
Antiguo 03/06/2010, 23:16
 
Fecha de Ingreso: mayo-2010
Mensajes: 27
Antigüedad: 14 años
Puntos: 1
Respuesta: guardar en un array consulta sql

Cita:
Iniciado por checooo300 Ver Mensaje
Hola haruchan, una correción, el error que manda es por que el método que llamas del resultset "result1.setString('Columna')"... no existe...
me parece que andas algo confundido con el bean. Saludos! y espero no moleste mi comentario...
Ah! tienes toda la razón, no es setString, es getString! gracias por corregirme!
quedaría

result1.getString("nombre");

por ejemplo.

y no, para nada molesta tu comentario, que estamos es para aprender y ayudarnos
  #8 (permalink)  
Antiguo 04/06/2010, 02:13
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 14 años
Puntos: 1
Respuesta: guardar en un array consulta sql

Cita:
Iniciado por checooo300 Ver Mensaje
me parece que andas algo confundido con el bean. Saludos! y espero no moleste mi comentario...
Entonces como sería lo del bean? me creo o no me creo una clase objeto por cada tabla?
  #9 (permalink)  
Antiguo 04/06/2010, 03:06
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 14 años
Puntos: 1
Respuesta: guardar en un array consulta sql

haruchan, me he hecho un bean de prueba como me has dicho, y de momento todo bien. Y ahora me he hecho un metodo getPersona() donde hago la consulta sql y me lo guardo en un arraylist, ahi tambien perfecto....

Ahora tengo el problema. Ahora quiero meter ese arraylist en una tabla jtable1 que tengo en la interfaz... y quiero que se meta cuando le de a un button1 asique el codigo de meterlo en la tabla lo tengo que hacer en el tipico metodo
Cita:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {}
Como lo puedo hacer? Porque eso lo habia conseguido ANTES de la siguiente manera(todo este codigo estaba dentro del metodo boton):

Cita:
private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) {
jTable1.setModel(modelo);

try{
Class.forName("com.mysql.jdbc.Driver");
Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost/gestion_campeonatos", "root", "tomorrow");
PreparedStatement consulta1 = conexion.prepareStatement("select * from judokas");
ResultSet result1 = consulta1.executeQuery();

while(result1.next()){
// Se crea un array que será una de las filas de la tabla
Object[] fila = new Object[10];
//Se rellena cada posición del array con una de las columanas de la tabla de la bb.dd
for(int i=0; i<10;i++){
fila[i] = result1.getObject(i+1);
}
//se añade al modelo la fila completa
modelo.addRow(fila);

}

}catch(Exception e){
System.out.println("Ocurrio la siguiente excepcion : " + e.toString());
System.out.close();
}

}
Con el modelo.addRow consigo meter la fila porque es de tipo Object....pero como meto mi lista si es un arrayList??? Porque me da error...

Y otra duda que si me resolvierais os lo agradeceria de por vida, es como hacer lo mismo, pero que se llene la tabla al darle a un button que esta en otra ventana JDIalog( esta ventana tiene un boton aceptar, y cuando le doy quiero que se cierre y me vuelva a la ventana padre que es donde esta la tabla, pero ya con los datos que se han cargado al darle a aceptar... Como lo harias?

GRACIAS

edito:
por cierto, segun este enlace:
http://www.forosdelweb.com/1342339-post2.html
Hacen lo mismo que me ha puesto haruchan pero a diferencia, en el constructor solo hace un super(); y cuando crea el objeto logicamente no le pasa nada... eso porque?

Última edición por peter_21; 04/06/2010 a las 03:42
  #10 (permalink)  
Antiguo 04/06/2010, 10:53
 
Fecha de Ingreso: mayo-2010
Mensajes: 27
Antigüedad: 14 años
Puntos: 1
Respuesta: guardar en un array consulta sql

Cita:
Con el modelo.addRow consigo meter la fila porque es de tipo Object....pero como meto mi lista si es un arrayList??? Porque me da error...
¿Podrías por favor poner el código de cómo lo estás intentando hacer con el ArrayList?

Cita:
Hacen lo mismo que me ha puesto haruchan pero a diferencia, en el constructor solo hace un super(); y cuando crea el objeto logicamente no le pasa nada... eso porque?
el super() es un llamado al constructor de la clase Object, que es la clase padre de todas las clases de java, por lo tanto no le pasa ningun parámetro.
  #11 (permalink)  
Antiguo 04/06/2010, 13:22
 
Fecha de Ingreso: mayo-2010
Ubicación: Chilpancingo, Gro
Mensajes: 25
Antigüedad: 14 años
Puntos: 0
Respuesta: guardar en un array consulta sql

mmm considero que debes poner tu declaración al arreglo antes de meterte al while, de lo contrario solo te regresara un dato....

debería quedar asi:
Código PHP:
Object[] fila = new Object[10];
while(
result1.next())
{
    for(
int i=0i<10;i++)
    {
        
fila[i] = result1.getObject(i+1);
    }
    
modelo.addRow(fila);

saludos...
y para el rellenado de la tabla, dejame checar unos ejemplos que tengo guardados porque ya no lo recuerdo...
  #12 (permalink)  
Antiguo 05/06/2010, 03:12
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 14 años
Puntos: 1
Respuesta: guardar en un array consulta sql

A ver si consigo hacerme explicar jeje.

Por un lado me he creado el bean, una clase judoka con su constructor con parametros, y los gets y los sets. No creo que haga falta poner este codigo.

Luego tengo otra clase que se llama InscribirParticipante que es una clase que extiende de JDialog, porque es una ventana vamos, un JDialog. En esa clase (ventana) tengo un JTable1 y quiero meter los datos de una consulta en dicha tabla.
Para eso me he creado como me habia dicho hurachan un public ArrayList getJudokas():

Cita:
private ArrayList lista=new ArrayList(); // Me lo creo fuera porque sino no puedo usar lista en otro metodo.

public ArrayList getJudokas(){
ArrayList lista=new ArrayList();

try{
Class.forName("com.mysql.jdbc.Driver");
Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost/gestion_campeonatos", "root", "contraseña");
PreparedStatement consulta1 = conexion.prepareStatement("select * from judokas");
ResultSet result1 = consulta1.executeQuery();

while(result1.next()){
int id = result1.getInt(1);
String nombre = result1.getString(2);
String ape1 = result1.getString(3);
String ape2 = result1.getString(4);
int fecha = result1.getInt(5);
String sexo = result1.getString(6);
String pais = result1.getString(7);
String comunidad = result1.getString(8);
String club= result1.getString(9);
String dni= result1.getString(10);

Judokas ju = new Judokas(id, nombre, ape1, ape2, fecha, sexo, pais, comunidad, club, dni);
lista.add(ju);


conexion.close();



}
return lista;
}catch(Exception e){
System.out.println("Ocurrio la siguiente excepcion : " + e.toString());
System.out.close();

return null;
}

}
Hasta ahí todo bien, ahora tengo un mi array lista los judokas y quiero que al darle a un boton jbutton que tengo en esa misma clase, me meta los datos en la tabla. Antes esto de aqui abajo me funcionaba porque mi array era Object[] pero me da error en addRow porque dice que es incompatible con el ArrayList...logico, espero un object

Cita:
private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) {

jTable1.setModel(modelo);
modelo.addRow(lista);

Y lo otro que quería saber, era si es posible hacer esto mismo, pero en vez un boton en esta ventana(clase), un boton desde otra ventana que es descendiente de esta. Es decir, yo le doy a un boton, se me abre una ventana, y al darle al boton de esta nueva ventana, se me llenan los datos en la tabla de la ventana de antes.
Repito, lo mismo de antes, pero la clase jButton9ActionPerformed esta en otra clase java...es posible?

Esas son mis 2 dudas.
Gracias
  #13 (permalink)  
Antiguo 17/06/2010, 07:43
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 14 años
Puntos: 1
Respuesta: guardar en un array consulta sql

Ya estoy por aqui, que he estado un par de semanas fuera....

Alguien puede ayudarme a lo mencionado arriba?
  #14 (permalink)  
Antiguo 17/06/2010, 08:47
 
Fecha de Ingreso: mayo-2010
Mensajes: 27
Antigüedad: 14 años
Puntos: 1
Respuesta: guardar en un array consulta sql

Si es un Array de judokas es una lista de objetos, por qué no intentas ingresándolas según la posición del array?
suponiendo que tu array se llama "lista", prueba poniendo esto donde deberia estar el object:
lista.get(i);
  #15 (permalink)  
Antiguo 18/06/2010, 02:29
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 14 años
Puntos: 1
Respuesta: guardar en un array consulta sql

Cita:
Iniciado por haruchan Ver Mensaje
Si es un Array de judokas es una lista de objetos, por qué no intentas ingresándolas según la posición del array?
suponiendo que tu array se llama "lista", prueba poniendo esto donde deberia estar el object:
lista.get(i);
Hola haruchan.

No entiendo a que te refieres

Si que es un Array de judokas, pero ingresar a donde? a que te refieres?

El problema es que me guardo todo en un ArrayList lista = new Arraylist();
Y luego, en otro metodo, cuando quiero añadir todo en la tabla, para poder hacerlo se usa el addRow, segun tengo entendido. Y claro, al hacer modelo.addRow(lista); me falla el addRow porque se ve que no puede añadir ArrayList....

Y claro, si en vez de ArrayList me declaro un Object[] lista = new Object[50]; tengo los inconvenientes de que primero, tengo que especificar un tamaño lo cual no quiero eso porque puede varias. Y despues, el lista.add(ju); me falla porque el "add" no sirve para Object. Asique ese es mi problema, que tengo un arrayList y no se como meterlo en la tabla porque el addRow solo es para object....

Por cierto, que seria mas logico, declar esto primero o lo segundo?:
private ArrayList lista = new ArrayList();
ó
private ArrayList<Judokas> lista = new ArrayList<Judokas>();

Que diferencia hay, porque en ambos guardo judokas....

gracias
  #16 (permalink)  
Antiguo 24/06/2010, 07:00
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 14 años
Puntos: 1
Respuesta: guardar en un array consulta sql

Cita:
Iniciado por peter_21 Ver Mensaje
Hola haruchan.

No entiendo a que te refieres

Si que es un Array de judokas, pero ingresar a donde? a que te refieres?

El problema es que me guardo todo en un ArrayList lista = new Arraylist();
Y luego, en otro metodo, cuando quiero añadir todo en la tabla, para poder hacerlo se usa el addRow, segun tengo entendido. Y claro, al hacer modelo.addRow(lista); me falla el addRow porque se ve que no puede añadir ArrayList....

Y claro, si en vez de ArrayList me declaro un Object[] lista = new Object[50]; tengo los inconvenientes de que primero, tengo que especificar un tamaño lo cual no quiero eso porque puede varias. Y despues, el lista.add(ju); me falla porque el "add" no sirve para Object. Asique ese es mi problema, que tengo un arrayList y no se como meterlo en la tabla porque el addRow solo es para object....

Por cierto, que seria mas logico, declar esto primero o lo segundo?:
private ArrayList lista = new ArrayList();
ó
private ArrayList<Judokas> lista = new ArrayList<Judokas>();

Que diferencia hay, porque en ambos guardo judokas....

gracias
  #17 (permalink)  
Antiguo 25/06/2010, 15:39
 
Fecha de Ingreso: mayo-2010
Mensajes: 27
Antigüedad: 14 años
Puntos: 1
Respuesta: guardar en un array consulta sql

Bueno, la verdad no he trabajado mucho con JTable, disculpa :(
Intenta haciendo un casting de ArrayList a Object
algo como:
(Object)ArrayList...

Código PHP:
Por ciertoque seria mas logicodeclar esto primero o lo segundo?:
private 
ArrayList lista = new ArrayList();
ó
private ArrayList<Judokaslista = new ArrayList<Judokas>();

Que diferencia hayporque en ambos guardo judokas.... 
Lo más lógico sería usar genericidad, así en esa lista únicamente puedes guardar objetos de tipo judokas. O sea:

private ArrayList<Judokas> lista = new ArrayList<Judokas>();

La primera opción está bien, pero es más óptima la segunda.
  #18 (permalink)  
Antiguo 26/06/2010, 01:45
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 14 años
Puntos: 1
Respuesta: guardar en un array consulta sql

Cita:
Iniciado por haruchan Ver Mensaje
Bueno, la verdad no he trabajado mucho con JTable, disculpa :(
Intenta haciendo un casting de ArrayList a Object
algo como:
(Object)ArrayList...

Código PHP:
Por ciertoque seria mas logicodeclar esto primero o lo segundo?:
private 
ArrayList lista = new ArrayList();
ó
private ArrayList<Judokaslista = new ArrayList<Judokas>();

Que diferencia hayporque en ambos guardo judokas.... 
Lo más lógico sería usar genericidad, así en esa lista únicamente puedes guardar objetos de tipo judokas. O sea:

private ArrayList<Judokas> lista = new ArrayList<Judokas>();

La primera opción está bien, pero es más óptima la segunda.

Ok, muchas gracias haruchan. Intentare lo del casting y ya te dire algo. Sino, pondre otro mensaje en el foro por si alguien sabe.
Gracias por tu tiempo y ayuda ;)

Etiquetas: sql
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 09:02.