【发布时间】:2014-08-29 02:16:08
【问题描述】:
无法添加或更新子行:外键约束失败 (dbprojeto.avaliacao, CONSTRAINT fk_cliente_avaliacao FOREIGN KEY (cliente) REFERENCES cliente (idcliente) ON DELETE NO ACTION ON更新无操作)
我尝试在数据库中插入一些数据时收到上述错误消息。该表有 5 个字段,但其中 2 个是外键。有人告诉我,我必须先恢复 ids(外键)才能正确插入。当用户已经登录时,必须捕获的 ID 之一是在 JSP 页面中的会话上。一旦调试项目向我显示这一切都是正确的,我猜 DAO 类没有任何问题。我当然认为可能与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");
}
%>
【问题讨论】:
标签: java mysql sql jsp servlets