Erro mysql

12 respostas
TASF

bom ida eu criei o banco de dados da seguinte forma

CREATE DATABASE `empresa` /*!40100 DEFAULT CHARACTER SET latin1 */;

DROP TABLE IF EXISTS `empresa`.`cadastro_empresa`;
CREATE TABLE  `empresa`.`cadastro_empresa` (
  `id_empresa` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nome_empresa` varchar(45) NOT NULL,
  `end_empresa` varchar(45) NOT NULL,
  `tel_empresa` varchar(10) NOT NULL,
  `cnpj_empresa` int(10) unsigned NOT NULL,
  `IE_empresa` varchar(25) NOT NULL,
  PRIMARY KEY (`id_empresa`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


DROP TABLE IF EXISTS `empresa`.`cadastro_funcionario`;
CREATE TABLE  `empresa`.`cadastro_funcionario` (
  `id_funcionario` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nome_funcionario` varchar(45) NOT NULL,
  `end_funcionario` varchar(45) NOT NULL,
  `tel_funcionario` int(10) unsigned NOT NULL,
  `id_empresa` int(10) unsigned NOT NULL,
  `salario_funcionario` double NOT NULL,
  `nome_empresa` varchar(45) NOT NULL,
  PRIMARY KEY (`id_funcionario`),
  KEY `FK_cadastro_funcionario_empresa` (`id_empresa`),
  CONSTRAINT `FK_cadastro_funcionario_empresa` FOREIGN KEY (`id_empresa`) REFERENCES `cadastro_empresa` (`id_empresa`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

so q qnto a aplicacao executa ela da esse erro Field 'id_empresa' doesn't have a default value Ocorreu um erro

esse 4e o trecho da conexao referente a ao erro

public void salvarFuncionario(Funcionario f){//inserindo o objeto no BD  recebe parametro
        Connection con = null;//responsavel por criar conexao com o banco de dados
        PreparedStatement pstm = null;//responsavel por executar o sql
        String sql = new String();
        sql = " INSERT INTO cadastro_funcionario(nome_funcionario, end_funcionario, tel_funcionario,nome_empresa, salario_funcionario) VALUES (?, ?, ?, ?, ?)";//sql para rodar no banco de dados o ? e os curingas
        try{
            con = criarConecao();//cria conexao com o banco de dados
            pstm = con.prepareStatement(sql);//executar o sql
            pstm.setString(1, f.getNome());
            pstm.setString(2, f.getEndereco());
            pstm.setString(3, f.getTelefone());
            pstm.setString(4, f.getEmpresa());
            pstm.setString(5, f.getSalario());
            pstm.execute();
            System.out.println("Dados salvos com sucesso");
            pstm.close();
            con.close();
        }catch(Exception e){
     	   e.printStackTrace();
            System.out.println(e.getMessage());
            System.out.println("Ocorreu um erro\nFavor entrar em contato com o administrador do sistema!\nemail [email removido]");
        }
    }

	
    
}

o q eu fiz de errado?? grato pela ajuda de todos

12 Respostas

kritiuns

Brow

INSERT INTO cadastro_funcionario(nome_funcionario, end_funcionario, tel_funcionario,nome_empresa, salario_funcionario) VALUES (?, ?, ?, ?, ?)

falta falar a empresa que o funcionario esta trabalhando …mais uma coisa vc tem nome empresa e ID empresa na tabela de funcionario … seria melhor deixar só o id da empresa e buscar o nome da empresa quando vc precisa na tabela empresa.

Extreme_X

Falta o id_empresa que você não colocou na inserção.

TASF

como assim falta a empresa q ele esta trabalhando?

Extreme_X

No insert você coloca nome_funcionario, end_funcionario, tel_funcionario,nome_empresa, salario_funcionario, mas você cria a tabela com um campo id_empresa que não seja nulo e referencia esse campo ao id_empresa da tabela cadastro_empresa. Você tem que colocar no insert o id_empresa, porque é um campo não nulo e você não especifiou nenhum valor padrão para ele, sendo que o id_empresa que você especificar tem que existir na tabela cadastro_empresa para que não aconteça o erro de foreign key.

kritiuns

id_empresa vc precisa adicionar esse campo no seu insert

INSERT INTO cadastro_funcionario(nome_funcionario, end_funcionario, tel_funcionario, id_empresa ,nome_empresa, salario_funcionario) VALUES (?, ?, ?, ?, ?, ?)
drsmachado
`id_empresa` int(10) unsigned NOT NULL,

Perceba que para a coluna id_empresa não há um valor default e, ela também não aceita nulos.

Portanto, ao inserir funcionário é obrigatório informar um valor para id_empresa.

mausexdd
falta falar a empresa que o funcionario esta trabalhando ..
so q qnto a aplicacao executa ela da esse erroview plaincopy to clipboardprint?
Field 'id_empresa' doesn't have a default value   

Ocorreu um erro  
Field 'id_empresa' doesn't have a [u]default value[/u]Ocorreu um erro

default value - voce não declarou o id_empresa

TASF

entao posso apagar o nome da empresa e deixar so o id da empresa na tabela funcionario como foi citado acima ,e solucionaria o problema?

Extreme_X

Sim, é o correto.

drsmachado

Então, na tabela funcionario existe uma quebra às regras de normalização de bancos de dados, você tem duas colunas que permitem acesso aos dados do usuário, você possui o id_empresa e o nome_empresa. Seria correto eliminar a coluna com o nome da empresa e manter apenas o id_empresa, como FK, referenciando a tabela empresa.

TASF

rsrsr… very hard rsrskkk…

olha o erro que apareceu agora…

Data truncated for column ‘id_empresa’ at row 1

oq e isso?

TASF

meu codigo esta assim

public void salvarFuncionario(Funcionario f){//inserindo o objeto no BD  recebe parametro
        Connection con = null;//responsavel por criar conexao com o banco de dados
        PreparedStatement pstm = null;//responsavel por executar o sql
        String sql = new String();
        sql = " INSERT INTO cadastro_funcionario(nome_funcionario, end_funcionario, tel_funcionario,id_empresa, salario_funcionario) VALUES (?, ?, ?, ?, ?)";//sql para rodar no banco de dados o ? e os curingas
        try{
            con = criarConecao();//cria conexao com o banco de dados
            pstm = con.prepareStatement(sql);//executar o sql
            pstm.setString(1, f.getNome());
            pstm.setString(2, f.getEndereco());
            pstm.setString(3, f.getTelefone());
            pstm.setString(4, f.getEmpresa());
            pstm.setString(5, f.getSalario());
            pstm.execute();
            System.out.println("Dados salvos com sucesso");
            pstm.close();
            con.close();
        }catch(Exception e){
     	   e.printStackTrace();
            System.out.println(e.getMessage());
            System.out.println("Ocorreu um erro\nFavor entrar em contato com o administrador do sistema!\nemail [email removido]");
        }
    }

	
    
}

e o banco esta assim

CREATE DATABASE `empresa` /*!40100 DEFAULT CHARACTER SET latin1 */;

DROP TABLE IF EXISTS `empresa`.`cadastro_empresa`;
CREATE TABLE  `empresa`.`cadastro_empresa` (
  `id_empresa` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nome_empresa` varchar(45) NOT NULL,
  `end_empresa` varchar(45) NOT NULL,
  `tel_empresa` int(10) unsigned NOT NULL,
  `cnpj_empresa` int(10) unsigned NOT NULL,
  `ie_empresa` varchar(45) NOT NULL,
  PRIMARY KEY (`id_empresa`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS `empresa`.`cadastro_funcionario`;
CREATE TABLE  `empresa`.`cadastro_funcionario` (
  `id_funcionario` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nome_funcionario` varchar(45) NOT NULL,
  `end_funcionario` varchar(45) NOT NULL,
  `tel_funcionario` int(10) unsigned NOT NULL,
  `id_empresa` int(10) unsigned NOT NULL,
  `salario_funcionario` double NOT NULL,
  PRIMARY KEY (`id_funcionario`),
  KEY `FK_cadastro_funcionario_empresa` (`id_empresa`),
  CONSTRAINT `FK_cadastro_funcionario_empresa` FOREIGN KEY (`id_empresa`) REFERENCES `cadastro_empresa` (`id_empresa`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

porem da esse erro java.sql.SQLException: Data truncated for column 'id_empresa' at row 1

Criado 9 de junho de 2011
Ultima resposta 9 de jun. de 2011
Respostas 12
Participantes 5