【问题标题】:Cannot add or update a child row on the sql无法在 sql 上添加或更新子行
【发布时间】: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


    【解决方案1】:

    我会说avaliacao.cliente.getIdcliente()); 返回的值在您的cliente 数据库表中不存在。

    【讨论】:

    • 这称为类关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多