java - 无法在 sql 上添加或更新子行

标签 java mysql sql jsp servlets

无法添加或更新子行:外键约束失败 (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/

相关文章:

php - 用于将Web表单输入到SQL的PHP​​下拉菜单

php - Mysql 子查询如何只获取 Table1 中的所有记录,如果没有找到与 Table2 的匹配项,仍然将它们列为 null 或其他内容?

PHP 数学四舍五入值

sql - oracle 触发器和 json_value

java - 调用并使用 .interrupt() 方法?

java - 如何跟踪多客户端服务器应用程序中的 Activity 客户端?

java - servlet url 模式与参数问题

java - "Emulator: FramebufferData::restore: warning: a texture is deleted without unbinding FBO"是什么意思以及如何解决此问题?

mysql - 结果优化了多达 1000 万行的数据库查询

sql - 表示两岁之间的年龄