2014-08-29 40 views
0

不能添加或更新子行:外鍵約束失敗(dbprojetoavaliacao,約束fk_cliente_avaliacao外鍵(cliente)參考文獻clienteidcliente)ON DELETE NO ACTION ON UPDATE NO ACTION)不能對SQL添加或更新子行

當試圖在數據庫中插入一些數據時,我收到了上述錯誤信息。該表有5個字段,其中2個是外鍵。我被告知必須首先恢復ID(外鍵),以便我可以正確插入。當用戶已經登錄時,需要捕獲的ID之一位於JSP頁面中的會話中。一旦調試項目向我顯示這是完全正確的,那麼DAO類沒什麼問題。可能與我認爲的Servlet有關。

SERVLET

 try { 
     Avaliacao avaliacao = new Avaliacao(); 
     Prestador prestador = new Prestador(); 
     Cliente cliente = new Cliente(); 
     avaliacao.prestador = new Prestador(); 

     AvaliacaoDAO dao = new AvaliacaoDAO(); 

     avaliacao.setNota(Integer.parseInt(request.getParameter("nota"))); 
     avaliacao.setComentario(request.getParameter("comentario")); 

     HttpSession session = request.getSession(true); 
     avaliacao.cliente = (Cliente) session.getAttribute("cliente"); 

     avaliacao.cliente.setIdcliente(avaliacao.cliente.getIdcliente()); 
     dao.inserirAvaliacao(avaliacao); 
     avaliacao.prestador.setIdprestador(PrestadorDAO.retornarId()); 

     request.setAttribute("msg", "Gravado com sucesso!"); 
     request.getRequestDispatcher("cadastrado.html").forward(request, response); 

DAO插入方法

public boolean inserirAvaliacao(Avaliacao avaliacao) throws SQLException { 
    try { 

     Connection conexao = Conexao.getConexao(); 

     Statement stmt = conexao.createStatement(); 

     String sql = "insert into avaliacao(idavaliacao, nota, comentario, cliente, prestador)values(?,?,?,?,?)"; 

     PreparedStatement pstmt = conexao.prepareCall(sql); 

     avaliacao.cliente = new Cliente(); 
     avaliacao.prestador = new Prestador(); 

     pstmt.setInt(1, avaliacao.getIdavaliacao()); 
     pstmt.setInt(2, avaliacao.getNota()); 
     pstmt.setString(3, avaliacao.getComentario()); 
     pstmt.setInt(4, avaliacao.cliente.getIdcliente()); 
     pstmt.setInt(5, avaliacao.prestador.getIdprestador()); 
     pstmt.execute(); 
     conexao.close(); 

     return true; 

    } catch (ClassNotFoundException ex) { 
     System.out.println(ex); 
     return false; 
    } catch (SQLException sql) { 
     System.out.println(sql); 
     return false; 
    } 

} 

會話在JSP

<% 

Cliente cliente = (Cliente) session.getAttribute("cliente"); 

if (cliente == null) { 
    cliente = (Cliente) session.getAttribute("cliente"); 
} 

%>

回答

0

我會說avaliacao.cliente.getIdcliente());返回的值不存在於您的cliente數據庫表中。

+0

這被稱爲類關係。 – user3689752 2014-08-29 02:28:58

相關問題