无法添加或更新子行:外键约束失败 (dbprojeto
.avaliacao
, CONSTRAINT fk_cliente_avaliacao
FOREIGN KEY ( cliente
) 引用 cliente
(idcliente
) 删除时不执行任何操作 更新时不执行任何操作)
当我尝试在数据库中插入一些数据时,收到上述错误消息。该表有 5 个字段,其中 2 个是外键。我被告知我必须首先恢复 ids(外键),以便我可以正确插入。当用户已经登录时,必须捕获的 ID 之一是 JSP 页面中的 session 。一旦调试项目显示一切正确,我猜 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 中的 session
<%
Cliente cliente = (Cliente) session.getAttribute("cliente");
if (cliente == null) {
cliente = (Cliente) session.getAttribute("cliente");
}
%>
最佳答案
我想说 avaliacao.cliente.getIdcliente());
返回一个 cliente
数据库表中不存在的值。
关于java - 无法在 sql 上添加或更新子行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25560742/