Author Topic: Problema al comunicar JFrame con base de datos Access  (Read 40 times)

hgc

  • Newbie
  • *
  • Posts: 2
  • Karma: 0
    • View Profile
Problema al comunicar JFrame con base de datos Access
« on: Enero 13, 2019, 10:27:10 pm »
Hola!
Tengo un problema que no consigo resolver. A ver si alguien me puede ayudar.

Tengo una aplicación Java que consta de un JFrame principal en el que presento en un ComboBox una serie de opciones a realizar sobre una base de datos Access.

Tengo la clase "BD" en la que creé todos los métodos que se comunican con la BD(crearTabla(), insertEmpleado(), etc...). Otra clase en la que creo el JFrame de la imagen anterior, y después pretendía crear ventanas adicionales para algunas funciones como insertar empleados.
Cuando selecciono por ejemplo la opción "3-Dar de alta un empleado" hago que se abra un JDialog para introducir los datos del nuevo empleado.

Yo pretendo que, una vez introducidos los datos y pulsado el botón "Crear empleado", se llame al método "insertEmpleado()" de la clase "BD" y se introduzcan los datos en la BD, pero me da fallo.

Dejo el código relacionado con el problema.

Método insertEmpleado() de la clase "BD":
Code: [Select]
public void insertEmpleados(String cod, String nombre, String telf){
        String s="INSERT INTO Empleados (Codigo_empleado, Nombre_empleado, Telefono) VALUES(?,?,?)";
        con=crearConexion();
       
        try {
            ps=con.prepareStatement(s);
            ps.setString(1, cod);
            ps.setString(2, nombre);
            ps.setString(3, telf);
            ps.executeUpdate(s);
            JOptionPane.showMessageDialog(null, "Empleado añadido correctamente");
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Se ha producido un error", "Error", JOptionPane.ERROR_MESSAGE);
            System.err.println(ex.getMessage());
            ex.printStackTrace();
        }finally{
            try {
                if(ps!=null){
                    ps.close();
                }
                if(con!=null){
                    con.close();
                }
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
        }
    }

Método listener del botón del JFrame principal:
Code: [Select]
private void btnAceptarActionPerformed(java.awt.event.ActionEvent evt) {                                           
        int opcion=combo.getSelectedIndex();
       
        switch (opcion){
            case 0:
                JOptionPane.showMessageDialog(null, "Primero debes escoger una de opciones indicadas");
                break;
               
            case 1:
                bd.crearEmpleados();
                break;
               
            case 2:
                bd.crearOrdenes();
                break;
               
            case 3:
                new InsertarEmpleados(this, true).setVisible(true);
                break;
        }
    }

Método listener del botón del JDialog para dar de alta empleados:
Code: [Select]
private void btnCrearActionPerformed(java.awt.event.ActionEvent evt) {                                         
        new BD().insertEmpleados(codigo.getText(), nombre.getText(), telf.getText());
    }

No sé si es problema de mi código, si es problema del driver que utilizo para conectar con Access o qué demonios es.
Ya sé que la duda es algo enrevesada, pero cualquier ayuda será agradecida.

Jaia

  • Newbie
  • *
  • Posts: 5
  • Karma: 0
    • View Profile
Re: Problema al comunicar JFrame con base de datos Access
« Reply #1 on: Enero 14, 2019, 02:52:21 am »
Hola:

No sé si será el caso concreto, pero a mí me ha sucedido en varias ocasiones que al crear la base de datos suelo poner el ID del registro como entero y autoincrementado. Con esto quiero decir que he visto que el Codigo_empleado lo tratas como String. Eso por un lado. Por otro, si fuera el caso, al tratarse de un entero con autoincremento no es necesario parase un Codigo_empleado, puesto que ese problema lo debería resolver el gestor de la base de datos. Así tu insert quedaría de la siguiente manera:
Code: [Select]
INSERT INTO Empleados (Nombre_empleado, Telefono) values(?, ?)
Otra cosa que veo es que ps.executeUpdate() no debería llevar argumentos.

Yo revisaría esto.

hgc

  • Newbie
  • *
  • Posts: 2
  • Karma: 0
    • View Profile
Re: Problema al comunicar JFrame con base de datos Access
« Reply #2 on: Enero 14, 2019, 08:09:21 pm »
Hola.
El ID lo trato como String para que me sea más cómodo con otros métodos. Es para una práctica, no una situación real. Por eso lo hago así.

Pero efectivamente el fallo era el pasarle un argumento al método excuteUpdate(). Ahora ya me funciona como quería.
Muchas gracias por tu ayuda.
Un saludo.

Jaia

  • Newbie
  • *
  • Posts: 5
  • Karma: 0
    • View Profile
Re: Problema al comunicar JFrame con base de datos Access
« Reply #3 on: Enero 14, 2019, 08:26:58 pm »
Me alegra poder haber sido de ayuda.

Un saludo.

 

ey