0
不能添加或更新子行:外鍵約束失敗(dbprojeto
avaliacao
,約束fk_cliente_avaliacao
外鍵(cliente
)參考文獻cliente
(idcliente
)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");
}
%>
這被稱爲類關係。 – user3689752 2014-08-29 02:28:58