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

porque me da este error?

Estas en el tema de porque me da este error? en el foro de Java en Foros del Web. Hola de nuevo, tengo un metodo en una clase que hace la consulta a una bb.dd y lo que hago con el resultado de esa ...
  #1 (permalink)  
Antiguo 26/06/2010, 12:17
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 13 años, 11 meses
Puntos: 1
porque me da este error?

Hola de nuevo,

tengo un metodo en una clase que hace la consulta a una bb.dd y lo que hago con el resultado de esa consulta es crearme un objeto con sus datos.
Es decir, yo tengo una clase Judoka con sus variables, constructor, metodos set y metodos get.

Y en otra clase, hago lo mencionado arriba. Lo dejo aqui:

Cita:
public ArrayList getJudokas(){
ArrayList listajudokas=new ArrayList();
//Object[] lista=new Object[50];


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);

System.out.println(id+nombre+ape1+ape2+fecha+sexo+ pais);
System.out.println("Antes de crear Judokas ju");
Judokas ju = new Judokas(id, nombre, ape1, ape2, fecha, sexo, pais, comunidad, club, dni);
System.out.println("Despues de crear Judokas ju");
listajudokas.add(ju);
System.out.println(listajudokas);



conexion.close();

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

return null;
}


}
En negrita he resaltado donde esta el problema. He puesto dos mensajes por pantalla para comprobar que exactamente no me hace el:
Cita:
Judokas ju = new Judokas(id, nombre, ape1, ape2, fecha, sexo, pais, comunidad, club, dni);
Porque? si me estoy guardo bien los datos de las consultas en las variables,porque muestro y me muestra los datos de la bb.dd, pero porque no me crea el Judoka ju bien? que hago mal?

gracias!

Última edición por peter_21; 28/06/2010 a las 01:52
  #2 (permalink)  
Antiguo 26/06/2010, 14:00
 
Fecha de Ingreso: septiembre-2009
Mensajes: 5
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: porque me da este error?

Lo que yo noto esk cierras el while muy abajo, incluso dentro esta el cierre de conexion, desde mi punto de vista eso esta mal... el cierre se hace al final igual en un bloke finally.....

try{

}catch{

}finally{
close();
}

pero bueno, si ese no es el problema acaso en tu clase Judoklas recibe tanto parámetro ???? si es así pues, no vería otro motivo de momento...

espero haber sido de ayuda....
  #3 (permalink)  
Antiguo 26/06/2010, 22:53
Avatar de FiruzzZ  
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 16 años, 4 meses
Puntos: 41
Respuesta: porque me da este error?

y donde está el error, la exception? NullPointer? SQLException? JavaNewbieException?

PD.: sin mencionar que toda la función está re mal implementada..
  #4 (permalink)  
Antiguo 27/06/2010, 04:30
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 13 años, 11 meses
Puntos: 1
Respuesta: porque me da este error?

Cita:
Iniciado por FiruzzZ Ver Mensaje
y donde está el error, la exception? NullPointer? SQLException? JavaNewbieException?

PD.: sin mencionar que toda la función está re mal implementada..
Vale, el error me daba porque en la clase Judokas habia escrito nomnbre en vez de nombre.... ^^ vergüenza de error y mira que lo he revisado.

Garotxm, respecto a lo de cerrar la conexion esque si pongo el conexion.close(); dentro del finally me lo marca como error porque me dice que no CANNOT FIND SYMBOL....y claro es porque el
Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost/gestion_campeonatos", "root", "contraseña");

esta dentro del try, pero es que eso no se debe poner fuera no? se supongo que la conexion se ha de hacer dentro del try, pero luego no me deja cerrarla fuera.


Y cuando dices que cierro el while muy tarde...esque no puedo cerrarlo antes no?
Quiero decir, si tengo una tabla en una bb.dd con los datos que veiais, y por cada fila de la tabla me quiero crear un objeto Judokas, el Judokas ju = new Judokas(...); y el añadirlo al ArrayList listajudokas tengo que ponerlo en el while no? Es que si lo pongo fuera del while, solo se me crea un Judokas ju....

FiruzzZ gracias por tu opinion ^^ en serio, soy novato y estoy para aprender. Tan mal implementada esta? Tengo claro que tengo cosas mal pero no creo que este tan mal...se admiten sugerencias porfavor

Y ya puestos, sabeis como pasar meter un ArrayList en un jtable? tengo entendido que en un jtable solo se puede meter Object[] pero nose como pasar un arraylist a Object[]....
Lo que quiero hacer es simplemente eso, de una tabla de datos, coger las filas que son los datos de cada judoka, y guardarme todo en un arrayList y eso mostrarlo en un jtable.

gracias
  #5 (permalink)  
Antiguo 27/06/2010, 06:57
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: porque me da este error?

Hola:

Para el finally, puedes declarar la variable antes del try y abrir la conexión dentro

Código:
Connection conexion=null;
try {
   conexion = DriverManager.getConnection (....);
   ...
} catch (...) {
} finally {
   if (null != conexion) conexion.close();
}
En cuanto a cerrar el while, debes cerrarlo antes de cerrar la conexion, el close de la conexion debe ir fuera del bucle.

ArrayList tiene un método toArray() que te devuelve el Object[]. De todas formas, echa un ojo a este enlace para ver cómo meter los resultados de la base de datos en un JTable http://www.chuidiang.com/java/mysql/...set_jtable.php

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #6 (permalink)  
Antiguo 28/06/2010, 01:52
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 13 años, 11 meses
Puntos: 1
Respuesta: porque me da este error?

Muchas gracias chuidiang. Lo he conseguido con el toArray[]:
Cita:
Judokas judo[] = new Judokas[lista.size()];
judo = lista.toArray(judo);
jTable1.setModel(modelo);
modelo.addRow(judo);

Pero tengo un problema con respecto al metodo
que tengo en el mensaje de mas arriba. Cuando hago la consulta, se que la hago bien porque si pongo un print justo despues me muestra los datos. Pero en cambio, cuando hago el :
Cita:
Judokas ju = new Judokas(id, nombre, ape1, ape2, fecha, sexo, pais, comunidad, club, dni);
No me guarda bien los datos porque si hago un print de ju, me muestra cosas como esta:
Cita:
gestion_campeonatos.Judokas@949f69
Y claro, cuando lo paso todo al jTable, en la tabla no me sale el nombre, ni los apellidos ni nada, me sale en cada columna cosas como lo de antes, pero cambiando el numero que hay despues de la @. Porque puede ser???




Y otra cosa, no me deja hacer lo del finally que dices. Si pongo como tu me has dicho, con el Connection conexion fuera del try:
Cita:
}finally{
if (null != conexion)
conexion.close();
}
0

En el conexion.close(); me dice:
"unreported exception java.sql.SQLException; must be caugth or declared to be thrown"

  #7 (permalink)  
Antiguo 28/06/2010, 01:59
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: porque me da este error?

Wenas

Cita:
Iniciado por peter_21 Ver Mensaje

No me guarda bien los datos porque si hago un print de ju, me muestra cosas como esta:

Y claro, cuando lo paso todo al jTable, en la tabla no me sale el nombre, ni los apellidos ni nada, me sale en cada columna cosas como lo de antes, pero cambiando el numero que hay despues de la @. Porque puede ser???

Porque al decir un system.out.println el sistema ira a buscar el metodo toString de la clase Judokas. como no existe usa el metodo toString de la clase padre (en tu caso sera object). Y eso es lo que imprime. Si quieres que te imprima el contenido del objeto ju, deberias crearte un metodo toString() en la clase Judokas.

Algo del estilo a :

Código:
public String toString()
{
     return "Hola caracola soy el judoka" + this.nombre;
}
Cita:
Iniciado por peter_21 Ver Mensaje
En el conexion.close(); me dice:
"unreported exception java.sql.SQLException; must be caugth or declared to be thrown"

Tan sencillo como hacer un try y un catch dentro del propio finally para capturar esa excepcion.

Saludos.
__________________
--
NO. Tu problema no es urgente.

CCFVLS
  #8 (permalink)  
Antiguo 28/06/2010, 04:04
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 13 años, 11 meses
Puntos: 1
Respuesta: porque me da este error?

Muchas gracias elAntonie.

Hay una cosa que no me termina de funcionar del todo.
Me gustaria hacerlo de tal forma que.
Yo lo que hago es desde un metodo getJudokas, me creo un ArrayList de tipo de Judokas y lo lleno con las consultas.

Y quiero que desde otro metodo(que es el metodo que se invoca al hacer accion en un boton de una ventana) se rellene el jtable.
El problema es que no puedo hacerlo como me decia chuidiang porque el resulset lo tengo en el otro metodo, entonces esto no me sirve:

Cita:
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);
Object [] fila = new Object[10];
for (int i=0;i<10;i++)
fila[i] = result1.getObject(i+1);
modelo.addRow(fila);
Eso me sirve si lo hago en el primer metodo getJudokas, que es donde hago la consulta, pero yo lo que hago o quiero hacer en ese metodo es guardarlo en un ArrayList judokas.
Lo consigo, pero a la hora de rellenar la tabla con el otro metodo, lo unico que consigo es que se me meta todos los datos de un objeto en el mismo dato de la columna. Es decir, en vez de tener en la tabla:

NOMBRE APELLIDO EDAD // no se ve bien, pero se entiende, cada dato en su columna
luis garcia 27

Pues en lugar de eso me sale:

NOMBRE APELLIDO EDAD
luisgarcia27

Es decir, se me llena solo 1 fila entera y en cada columna, todo el objeto.
Como consigo acceder al primer elemento de cada objecto? Os dejo que es lo que hago para que me salga asi:

Cita:
lista = getJudokas(); //lista es un ArrayList que me creo para toda la clase y al llamar a getJudokas, le devuelve el ArrayList que se llena de Judokas en ese metodo
Judokas judo[] = new Judokas[lista.size()]; // Me creo un array de objeto para pasar el arrayList con el toArray.

judo = lista.toArray(judo); // lo paso

Object[] fila = new Object[judo.length]; ////con judo.length le indico las 10 columnas
for(int i=0;i<fila.length;i++){
fila[i]=judo[i];
}
jTable1.setModel(modelo);
modelo.addRow(fila);
Y esto hace lo que he dicho, me crea solo una fila con sus 10 columnas y en cada columna me mete todos los datos de los judokas. En la primera columna el nombre apellido1 edad...del primer judoka, en la segunda todos los datos del segundo judoka etc...

Espero que con esta duda ya no os moleste mas
  #9 (permalink)  
Antiguo 28/06/2010, 08:59
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: porque me da este error?

Buenas.

Con Object[] fila = new Object[judo.length) estás haciendo UNA única fila con tantas columnas como judokas.
En el for (int i=0.... ) estás recorriendo las columnas de esa única fila.
Con fila[ i ]=judo[ i ] estás metiendo en cada columna un judoka entero.

Tendrías que hacer algo así

Código:
judo = lista.toArray(judo);

for (int i=0; i<judo.length; i++) { // bucle para cada judoka
   Object[] fila = new Object[10];    // una fila para cada judoka
   fila[0]=judo[i].getNombre();    // rellenar sus columnas ...
   fila[1]=judo[i].getColumna2();
   ....
   fila[9]=judo[i].getColumna10();
   modelo.addRow(fila);
}
jTable1.setModel(modelo);
Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #10 (permalink)  
Antiguo 28/06/2010, 11:51
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 13 años, 11 meses
Puntos: 1
Respuesta: porque me da este error?

MUCHAS GRACIAS! SOLUCIONADO!

Etiquetas: Ninguno
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 08:38.