Salvar chaves externas no MySQL

6 respostas
Jose_Carlos_Araujo

A aplicação está com as seguintes acões no botão slavar faz corretamente apenas não salva a fk.

private void jButtonSalvarActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

//Instancia um objeto da classe JFrameCadEntrada

Entrada entrada = new Entrada();
//seta os valores referente ao JFrameCadEntrada
    data = new Date();
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");

    dataAtual = df.format(data);
    java.sql.Date dia = java.sql.Date.valueOf(dataAtual);
    entrada.setDataEntrada(dia);
    entrada.setDescricao(jTextFieldDescricao.getText());
    solicitacao.setFkCliente(WIDTH);
    
    EntradaDAO entradaDAO = new EntradaDAO();
    entradaDAO.salvarEntada(entrada);
    JOptionPane.showMessageDialog(null, "Entrada " + entrada.getDescricao() + " Salvo com Sucesso!");
}

Metodo DAO para salvar novo registro

public void salvarSolicitacao(Solicitacao soli) {

try {

conn = ConnectionFactory.getConnection();
sql = "INSERT INTO solicitacao(data,ordemServico,tipo,descricao,fk_cliente) VALUES(?,?,?,?,?)";

		PreparedStatement stm = conn.prepareStatement(sql);
                          stm.setDate(1, (Date) soli.getDataSolicitacao());
                          stm.setString(2, soli.getOs());
                          stm.setString(3, soli.getTipo());
                          stm.setString(4, soli.getDescricao());
                          stm.setInt(4, soli.getFkCliente());
                    
		stm.execute();
		stm.close();

		System.out.println("Solicitação " + soli.getOs()+" Cliente: "+soli.getFkCliente()
				+ " cadastrado com sucesso!!!");
		conn.close();
	} catch (SQLException e) {
		e.printStackTrace();
	} catch (Exception e) {
		e.printStackTrace();
	}
}

Sem colocar a chave externa salva mas quando coloco não vai.

6 Respostas

A

faz o seguinte, pede para ele exibir o FK ao cadastrar pra gente ver o resultado que ele está tendo. Pode ser que não esteja cadastrando porque o valor passado é null já.

quando você for colocar o seu código novamente, coloca ele entre [code][/code] (sem *) assim fica melhor pra gente analisar.

wbdsjunior

Jose Carlos Araujo:
A aplicação está com as seguintes acões no botão slavar faz corretamente apenas não salva a fk.

private void jButtonSalvarActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

//Instancia um objeto da classe JFrameCadEntrada

Entrada entrada = new Entrada();
//seta os valores referente ao JFrameCadEntrada
    data = new Date();
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");

    dataAtual = df.format(data);
    java.sql.Date dia = java.sql.Date.valueOf(dataAtual);
    entrada.setDataEntrada(dia);
    entrada.setDescricao(jTextFieldDescricao.getText());
    solicitacao.setFkCliente(WIDTH);
    
    EntradaDAO entradaDAO = new EntradaDAO();
    entradaDAO.salvarEntada(entrada);
    JOptionPane.showMessageDialog(null, "Entrada " + entrada.getDescricao() + " Salvo com Sucesso!");
}

Metodo DAO para salvar novo registro

public void salvarSolicitacao(Solicitacao soli) {

try {

conn = ConnectionFactory.getConnection();
sql = "INSERT INTO solicitacao(data,ordemServico,tipo,descricao,fk_cliente) VALUES(?,?,?,?,?)";

		PreparedStatement stm = conn.prepareStatement(sql);
                          stm.setDate(1, (Date) soli.getDataSolicitacao());
                          stm.setString(2, soli.getOs());
                          stm.setString(3, soli.getTipo());
                          stm.setString(4, soli.getDescricao());
                          stm.setInt(4, soli.getFkCliente());
                    
		stm.execute();
		stm.close();

		System.out.println("Solicitação " + soli.getOs()+" Cliente: "+soli.getFkCliente()
				+ " cadastrado com sucesso!!!");
		conn.close();
	} catch (SQLException e) {
		e.printStackTrace();
	} catch (Exception e) {
		e.printStackTrace();
	}
}

Sem colocar a chave externa salva mas quando coloco não vai.

tente trocar isso:

... stm.setString(4, soli.getDescricao()); stm.setInt(4, soli.getFkCliente()); ...
por isso:

... stm.setString(4, soli.getDescricao()); stm.setInt(5, soli.getFkCliente()); ...

Jose_Carlos_Araujo

De fato estava errado valeu pelo toque. é que já estou um bom tempo quebrando cabeça com este projeto.

Evoluiu. Salvou chave externa poerem o valor salvo não corresponde ao desejado todas as tentetivas com usuários diferentes cadastrado salvou o usuário cadastrado com registro 1.

wbdsjunior

Jose Carlos Araujo:
De fato estava errado valeu pelo toque. é que já estou um bom tempo quebrando cabeça com este projeto.

Evoluiu. Salvou chave externa poerem o valor salvo não corresponde ao desejado todas as tentetivas com usuários diferentes cadastrado salvou o usuário cadastrado com registro 1.


não seria por causa desta linha:

... solicitacao.setFkCliente(WIDTH); // WIDTH parece ser uma constante ...

Jose_Carlos_Araujo

[color=darkblue][/color]Mudei tos metodo salvar na aplicação fiz o tratamento das exceções gravou corretamente

O metodo ficou assim.

private void jButtonSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                              

         if (jButtonSalvar.getText().equals("Inserir")) {

              //Verificação de Campos obrigatórios e Validação dos Dados
              if(!jRbDevolucao.isSelected() && !jRbSaida.isSelected()){
                   JOptionPane.showMessageDialog(null, "Informe o Tipo da Solicitação", "Campos Obrigatórios", JOptionPane.WARNING_MESSAGE);
              }else if("".equals(jTextAreaDescricao.getText().trim())){
                   JOptionPane.showMessageDialog(null, "Preencha a Descrição da Solicitação", "Campos Obrigatórios", JOptionPane.WARNING_MESSAGE);
              }else{
              //Verifica se é para salvar um novo registro
              String param = new String();

            //peguei o parametro escolhido na lista
              param = jListCliente.getSelectedValue().toString();

              //Instancia um objeto da classe JFrameCadSolicitacao

              //seta os valores referente ao JFrameCadSolicitacao
              SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
              try {
                   //java.sql.Date data = new java.sql.Date(format.parse(jTextFieldData.getText()).getTime());
                   java.sql.Date data = new java.sql.Date(format.parse(jFormattedTextField.getText()).getTime());
                   solicitacao.setDataSolicitacao(data);
              } catch (ParseException ex) {
                   Logger.getLogger(JFrameCadSolicitacao.class.getName()).log(Level.SEVERE, null, ex);
              }

              solicitacao.setOs(jTextFieldOS.getText());
              solicitacao.setDescricao(jTextAreaDescricao.getText());
              if (jRbDevolucao.isSelected()){
                   solicitacao.setTipo("D");
              }else{
                   solicitacao.setTipo("S");
              }
              
              solicitacaoDAO.salvarSolicitacao(solicitacao, idCliente);
              JOptionPane.showMessageDialog(null, "Solicitacao " + solicitacao.getOs() + " Salvo com Sucesso!");
              jButtonLimparActionPerformed(evt);
              }
         } else if(jButtonSalvar.getText().equals("Alterar")){
              //Verificação de Campos obrigatórios e Validação dos Dados
              if("".equals(jTextAreaDescricao.getText().trim())){
                   JOptionPane.showMessageDialog(null, "Preencha a Descrição da Solicitação", "Campos Obrigatórios", JOptionPane.WARNING_MESSAGE);
              }else{
                        
                        //seta os valores referente ao JFrameCadSolicitacao
                        SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
                        try {
                             //java.sql.Date data = new java.sql.Date(format.parse(jTextFieldData.getText()).getTime());
                             java.sql.Date data = new java.sql.Date(format.parse(jFormattedTextField.getText()).getTime());
                             solicitacao.setDataSolicitacao(data);
                        

                        solicitacao.setDescricao(jTextAreaDescricao.getText());
                        solicitacaoDAO.atualizaSolicitacao(solicitacao);
                        JOptionPane.showMessageDialog(null, "Solicitacao " + solicitacao.getOs() + " Atualizada com Sucesso!");
                        jButtonLimparActionPerformed(evt);
                        
                        } catch (ParseException ex) {
                             Logger.getLogger(JFrameCadSolicitacao.class.getName()).log(Level.SEVERE, null, ex);
                        }catch (NullPointerException e){
                             e.printStackTrace();
                        }catch (Exception e){
                             e.printStackTrace();
                        }
              }
         }
    }

Valeu pelo auxilio.

Jose_Carlos_Araujo

Detalhe da correção do codigo.

//peguei o parametro escolhido na lista   
          param = jListCliente.getSelectedValue().toString();
Criado 25 de junho de 2010
Ultima resposta 25 de jun. de 2010
Respostas 6
Participantes 3