Error inserting JDBC data

0

I'm having the following problem, I want to insert the data from my expense table but some error occurs with my foreign key, what can it be?

  

expensea: Can not add or update child row: a foreign key constraint   fails ( trabalhoviagemd . despesa , CONSTRAINT despesa_ibfk_1   FOREIGN KEY ( idViagem ) REFERENCES viagem ( idViagem ))

Dao insert method

 public class DespesaDao {
    private final static String DATE_FORMAT = "yyyy-MM-dd";

    private static final int QTDE = 10; // Constante = quantidade de endereços;
    private static DespesaBean vetor[] = new DespesaBean[QTDE];
    private static final String cabecalho = "idViagem,tipoDespesa, valorDespesa, dataDespesa\n";

    public static boolean inserir(DespesaBean despesa) {
        boolean executou = false;
        if (ConexaoMySQL.conectar()) {
            try {
                Connection con = ConexaoMySQL.getConexao();
                String sql = "Insert into despesa values (0,?,?,?,?)";
                PreparedStatement P = con.prepareStatement(sql);

                P.setInt(1, despesa.getIdViagem());
                P.setString(2, despesa.getTipoDespesa());
                P.setDouble(3, despesa.getValorDespesa());
                P.setString(4,DataHelper.CalendarToString(DATE_FORMAT,despesa.getDataDespesa()));

                P.executeUpdate();
                System.out.println("despesaDao.inserir:\n" + P);
                P.close();
                executou = true;
            } catch (Exception e) {
                System.out.println("despesaDao: " + e.getMessage());
                e.printStackTrace();
            } finally {
                ConexaoMySQL.fecharConexao();
            }

        }
        return executou;
    }

Bank Tables

 CREATE TABLE viagem (
   idViagem INT NOT NULL AUTO_INCREMENT,
   tipoViagem VARCHAR(16) NOT NULL,
   dataInicio DATE NOT NULL,
   dataEncerramento DATE NOT NULL,
   cidade VARCHAR(16) NOT NULL,
   uf VARCHAR(16) NOT NULL,
   valorDiaria DOUBLE NOT NULL,
   colaborador VARCHAR(32) NOT NULL,
   cliente VARCHAR(32) NOT NULL,
 PRIMARY KEY ('idViagem'));

   select * from viagem;

 CREATE TABLE despesa (
    idDespesa INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    idViagem INT NOT NULL,
    tipoDespesa VARCHAR(16) NOT NULL,
    valorDespesa DOUBLE NOT NULL,
    dataDespesa DATE NOT NULL,
 FOREIGN KEY (idViagem) REFERENCES trabalhoviagemd.viagem(idViagem));
    
asked by anonymous 04.07.2015 / 04:09

1 answer

2

Your problem is simple: when trying to insert your record into the despesa table, you are trying to insert a NOT value into the idViagem table in the viagem field.

Your foreign key ( foreign key ) despesa.idViagem is probably set to RESTRICT , that is, if any data is entered in the table containing the foreign key, this foreign data (in the despesa.idViagem strong> REQUIRED exists in the corresponding table (in this case, viagem.idViagem ).

In other words, the 1 value does not exist in the idViagem field of the viagem table.

Example: Wrong

table viagem

idViagem | tipoViagem | dataInicio | dataEncerramento | cidade | uf | valorDiaria | colaborador | cliente
1        | ...        | ...        | ...              | ...    | ...| ...         | ...         | ...
2        | ...        | ...        | ...              | ...    | ...| ...         | ...         | ...
3        | ...        | ...        | ...              | ...    | ...| ...         | ...         | ...

table despesa

idDespesa | idViagem                                        | tipoDespesa | valorDespesa | dataDespesa
1         | 1   (correto, viagem.idViagem = 1 existe)       | ...         | ...          | ...
2         | 2   (correto, viagem.idViagem = 2 existe)       | ...         | ...          | ...
3         | 3   (correto, viagem.idViagem = 3 existe)       | ...         | ...          | ...
4         | 100 (errado, viagem.idViagem = 100) não existe  | ...         | ...          | ...
5         | 101 (errado, viagem.idViagem = 101) não existe) | ...         | ...          | ...

Example: Correct

table viagem

idViagem | tipoViagem | dataInicio | dataEncerramento | cidade | uf | valorDiaria | colaborador | cliente
1        | ...        | ...        | ...              | ...    | ...| ...         | ...         | ...
2        | ...        | ...        | ...              | ...    | ...| ...         | ...         | ...
3        | ...        | ...        | ...              | ...    | ...| ...         | ...         | ...
100      | ...        | ...        | ...              | ...    | ...| ...         | ...         | ...
101      | ...        | ...        | ...              | ...    | ...| ...         | ...         | ...

table despesa

idDespesa | idViagem                                    | tipoDespesa | valorDespesa | dataDespesa
1         | 1   (correto, viagem.idViagem = 1 existe)   | ...         | ...          | ...
2         | 2   (correto, viagem.idViagem = 2 existe)   | ...         | ...          | ...
3         | 3   (correto, viagem.idViagem = 3 existe)   | ...         | ...          | ...
4         | 100 (correto, viagem.idViagem = 100 existe) | ...         | ...          | ...
5         | 101 (correto, viagem.idViagem = 101 existe) | ...         | ...          | ...
    
04.07.2015 / 04:36