Java - Excepción al consultar datos...

 
Vista:
Imágen de perfil de Álvaro
Val: 8
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Excepción al consultar datos...

Publicado por Álvaro (4 intervenciones) el 06/06/2019 00:52:21
Buenas a todos, aún sigo realizando el proyecto de interfaces, haciendo bastantes avances, pero me aparece un error que no he podido solucionar.. La excepción que lanza es esta: "Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Cannot format given Object as a Number"

Supuse que el fallo vendría de insertar datos en un JTable donde una de sus columnas no fuera del tipo de uno de los datos de la BBDD que tengo, pero no es así..

En la siguiente imagen está el tipo de las columnas del JTable

Anotacion-2019-06-05-235123

Y a continuación el código donde realizo la consulta

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public void consultarLibros(Conexion conexion, JTable libros) throws SQLException {
    conexion = new Conexion();
 
    for (int i = libros.getRowCount() - 1; i >= 0; i--) {
        ((DefaultTableModel) libros.getModel()).removeRow(i);
    }
 
    if (libros == null) {
        System.out.println("La tabla está nula");
    }
 
    String consulta = "SELECT * FROM libreria.libro";
    Statement query = conexion.establecerConexion().createStatement();
    ResultSet resultadoTabla = query.executeQuery(consulta);
    System.out.println("La consulta de libros se realizó efectivamente.");
 
    if (query == null) {
        System.out.println("Query = null");
    }
 
    if (resultadoTabla == null) {
        System.out.println("resultadoTabla = null");
    }
 
    if (libros != null) {
        while (resultadoTabla.next()) {
            Object[] fila = new Object[4];
 
            for (int i = 0; i < 4; i++) {
                fila[i] = resultadoTabla.getString(i + 1);
            }
 
            ((DefaultTableModel) libros.getModel()).addRow(fila);
 
        }
    }

Agradecería algunos consejos y posibles soluciones. Muchas gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Excepción al consultar datos...

Publicado por Billy Joel (875 intervenciones) el 07/06/2019 19:22:44
Prueba con esto...
Luego te explico que había mal.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public void llenarTablaLibros(Conexion conexion, JTable libros) {
    conexion = new Conexion();
    if (libros == null) {
        System.out.println("La tabla está nula");
    } else {
        /**
         * Primero obtenemos los nombres de las columnas y los colocamos en
         * un arreglo columns
         */
        DefaultTableModel dtm = (DefaultTableModel) libros.getModel();
        String[] columns = new String[dtm.getColumnCount()];
        for (int i = 0; i < columns.length; i++) {
            columns[i] = dtm.getColumnName(i);
        }
        /**
         * Creamos un objeto Connection para manejar la apertura y cierre de
         * la conección con la base de datos
         */
        Connection cn = null;
        try {
            //String consulta = "SELECT * FROM libreria.libro";
            /**
             * Acemos la consulta a la base de datos por las columnas
             * específicas que queremos. Evita utilizar asteriscos (*) en tu
             * programa. Los asteriscos están bien para probar consultas, no
             * para el programa.
             */
            String consulta = "SELECT Titulo, Autor, Editorial, Precio FROM libreria.libro";
            cn = conexion.establecerConexion();
            Statement query = cn.createStatement();
            ResultSet resultadoTabla = query.executeQuery(consulta);
            System.out.println("La consulta de libros se realizó efectivamente.");
            /**
             * Almacenamos los resultados en un ArrayList ya que esta
             * estructura de datos nos permite añadir registros sin que
             * antes tengamos que definir el tamaño del arreglo
             */
            List<Object[]> filas = new ArrayList();
            while (resultadoTabla.next()) {
                Object[] fila = new Object[columns.length];
                for (int i = 0; i < fila.length; i++) {
                    fila[i] = resultadoTabla.getObject(i + 1);
                }
                filas.add(fila);
            }
            /**
             * Con los registros almacenados en el arraylist ahora creamos
             * un arreglo bidimencional para crear un DefaultTableModel
             */
            Object[][] data = new Object[filas.size()][columns.length];
            for (int i = 0; i < data.length; i++) {
                data[i] = filas.get(i);
            }
 
            /**
             * Ahora creamos el nuevo DefaultTableModel y lo seteamos en la
             * tabla
             */
            libros.setModel(new DefaultTableModel(data, columns));
        } catch (SQLException ex) {
            /**
             * Cualquier error de conexión o consulta que suceda en try será
             * enviado a este bloque
             */
            ex.printStackTrace(System.out);
        } finally {
            /**
             * Finalmente cerramos la conexion a la base de datos
             */
            try {
                if (cn != null && !cn.isClosed()) {
                    cn.close();
                }
            } catch (SQLException ex) {
                ex.printStackTrace(System.out);
            }
        }
    }
}

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar