Bom dia Galera,
Estou desenvolvendo uma pequena aplicação desktop através do NetBeans utilizando o Swing, porem estou enfrentando um problema na hora de gravar os dados no banco Mysql. O problema ocorre quando eu clico no botão “salvar” é exibida a seguinte mensagem:
com.mysql.jdbc.exceptions:4,MysqlIntegrityConstraintViolation: Cannot add or update a child row: a foreign key constraint fails ('ControleFinanceiro'.'conta',CONSTRAINT 'subcategoriaId_FK' FOREIGN KEY ('subcategoriaId') REFERENCES 'subcategria' ('id'))
Segue abaixo o código da minha DAO a qual salva no banco de dados:
`
public void Salvar(Conta c) {
String sql = "insert into conta (tipoconta, pessoaId, categoriaId, subcategoriaId, valor, dataVencimento, statusConta) VALUES (?,?,?,?,?,?,?)";
try (PreparedStatement stmt = connection.prepareStatement(sql)){
stmt.setString(1,c.getTipoConta().getDescricao());
stmt.setInt(2,c.getPessoaId());
stmt.setInt(3,c.getCategoriaId());
stmt.setInt(4,c.getsubCategoriaId());
stmt.setDouble(5,c.getValor());
java.sql.Date dtVencimento = java.sql.Date.valueOf(c.getDataVencimento());
stmt.setDate(6,dtVencimento);
stmt.setString(7, c.getStatusConta().getDescricao());
stmt.execute();
stmt.close();
JOptionPane.showMessageDialog(null,"Cadastro de conta realizado com sucesso");
connection.close();
}
catch(SQLException ex) {
JOptionPane.showMessageDialog(null,"Não foi possível cadastrar a conta no banco de dados\n" + ex);
}
}
`
Essas são as minhas tabelas criadas no banco MYSQL Workbench:
`
CREATE TABLE Categoria
(id int NOT NULL auto_increment,
descricao VARCHAR(70) NOT NULL,
CONSTRAINT pk_categoriaId primary key(id));
CREATE TABLE Subcategoria
(id int NOT NULL auto_increment,
tipo VARCHAR(50) NOT NULL,
CONSTRAINT pk_subcategoriaId primary key(id));
CREATE TABLE Pessoa
(id int NOT NULL auto_increment,
nome VARCHAR(50) NOT NULL,
nomeBanco VARCHAR(50) NOT NULL,
saldo decimal(5) NOT NULL,
CONSTRAINT pk_pessoaId primary key(id));
CREATE TABLE Conta
(id smallint(50) NOT NULL auto_increment,
tipoconta enum ('Pagar','Receber'),
statusConta enum ('Pendente','Paga','Cancelada'),
pessoaId INT NOT NULL,
categoriaId INT NOT NULL,
subcategoriaId INT NOT NULL,
valor decimal(5),
dataVencimento date,
CONSTRAINT pk_contaId primary key(id),
CONSTRAINT fk_categoriaId FOREIGN KEY (categoriaId) REFERENCES categoria (id),
CONSTRAINT fk_subcategoriaId FOREIGN KEY (subcategoriaId) REFERENCES Subcategoria (id),
CONSTRAINT fk_pessoaId FOREIGN KEY (pessoaId) REFERENCES Pessoa (id));
`
Só para que vocês entendam melhor, o conteúdo das tabelas “Pessoa”, “Categoria” e “Subcategoria” é exibido em um combobox contido no formulário de Cadastro de Conta, sendo assim o usuário deverá selecionar cada campo para cadastrar uma conta, o estranho é que esse erro só ocorre caso eu selecione o primeiro valor vindo de cada uma dessas tabelas, caso eu pegue o valor contido na segunda posição da tabela, o erro não ocorre, isso vale para qualquer uma das 3 tabelas (pessoa, categoria ou subcategoria).
Desde já agradeço os colegas por qualquer ajuda.