通过组合框添加外键时swing应用程序出错

8qgya5xd  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(222)

我在一个应用程序上遇到了一个问题,这个应用程序是通过一个swing表单在一个表上保存一个carrer,但是我不断地得到这个错误,它说我不能添加到子行,我知道这可能是由于添加到子行的值不存在pk应该去的地方造成的,但是我确定在父表中有一个pk值,所以我不知道会发生什么。我发送给fk的值是组合框的索引
以下是两张表:

create table facultad(
        codigoFacultad int primary key auto_increment,
        nombre varchar(50),
        telefono varchar(50)
        );

create table carrera(
        codigoCarrera int primary key auto_increment,
        nombre varchar(50),
        cantidadMaterias int,
        codigoFacultad int,
        foreign key (codigoFacultad) references facultad(codigoFacultad) on update cascade
        );

这是我用来保存在数据库中的过程

create procedure insertarCarrera(in idCar int, nom nvarchar(75), numMater int, codFac int)
insert into carrera values(idCar, nom, numMater,codFac);

这是我如何从swing运行save的:

public void insertarCarrera(Carrera ca){

        try 
        {
            this.conectar();

            CallableStatement cal = this.getCon().prepareCall("{call insertarCarrera(?,?,?,?)}");

            cal.setInt(1, ca.getCodigoCarrera());
            cal.setString(2, ca.getNombre());
            cal.setInt(3, ca.getCantidadMaterias());
            cal.setInt(4, ca.getCodigoCarrera());
            cal.executeUpdate();

            JOptionPane.showMessageDialog(null, "Exito al insertar ");

        } catch (SQLException e) 
        {
            JOptionPane.showMessageDialog(null, "Error al insertar "+e.toString());
        }
        finally
        {
            this.desconectar();
        }
    }

conectar()是调用mysql连接的方法,ca是我填充数据的对象
最后,这就是如何从表单中收集数据

private void agregarCarrera() {

    ca.setCodigoCarrera(Integer.parseInt(this.jTxtCodigo.getText()));
    ca.setNombre(this.jTxtNombre.getText());
    ca.setCantidadMaterias(Integer.parseInt(this.jSpinMaterias.getValue().toString() ));
    ca.setCodigoFacultad(jCmbFacultad.getSelectedIndex());

    dCa.insertarCarrera(ca);
}

希望有人能帮忙,为此折腾了一整天

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题