java - mysql 约束错误

标签 java mysql sql jsp jakarta-ee

我正在构建一个jsp项目,并为其创建了一个数据库,其中包含多个表和外键。 我制作了一个简单的页面来在表中插入一些实体,但出现此错误。我已经使用 jsp 一周了,我之前已经在数据库表中插入了实体,但从未收到此错误,我对此进行了很多搜索,但仍然出现此错误。请帮我解决这个问题并告诉我哪里出错了。

<%@page contentType="text/html" language="java" pageEncoding="UTF-8"%>
<%@page import="java.sql.*" %>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Add Test</title>
    </head>
    <body>

        <%@include file="header.jsp" %>

          <div class="jumbotron">
    <div class="container">        
        <form action="saveTest.jsp">

                                <div class="row">
                    <div class="col-lg-offset-4 col-lg-2">
                                            <h3>Test Title</h3>
                    </div>
                    <div class="col-lg-4">
                                            <h3><input type="text" class="form-control" name="test" required></h3>
                    </div>

                </div>

                                 <div class="row">
                    <div class="col-lg-offset-4 col-lg-2">
                                            <h3>Description</h3>
                    </div>
                    <div class="col-lg-4">
                                            <h3><textarea type="text" class="form-control" name="des"></textarea></h3>
                    </div>

                </div>



                                <div class="row">
                    <div class="col-lg-offset-6 col-lg-2">
                                            <h3><input type="submit" value="Add Test" class="form-control" ></h3>
                    </div>


                </div>
            </form>
                  </div>
          </div>
       <%@include file="footer.jsp" %>
    </body>
</html> 

下面是查询的页面:

<%@page contentType="text/html" language="java" pageEncoding="UTF-8"%>
<%@page import="java.sql.*" %>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Save Test</title>
    </head>
    <body>
        <%
        String test=request.getParameter("test");
        String des=request.getParameter("des");

         Class.forName("com.mysql.jdbc.Driver");
        Connection con=DriverManager.getConnection("jdbc:mysql://localhost/exam","root","password");
        String q="insert into test(testname,description) values(?,?);";
        PreparedStatement p=con.prepareStatement(q);
        p.setString(1, test);
        p.setString(2, des);
        p.executeUpdate();
        con.close();
        response.sendRedirect("addQuestion.jsp");
        %>
    </body>
</html> 

我收到的错误是:

HTTP Status 500 - javax.servlet.ServletException: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`exam`.`test`, CONSTRAINT `testteacherid` FOREIGN KEY (`teacherid`) REFERENCES `teacher` (`teacherid`) ON DELETE NO ACTION ON UPDATE NO ACTION)

type Exception report

message javax.servlet.ServletException: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`exam`.`test`, CONSTRAINT `testteacherid` FOREIGN KEY (`teacherid`) REFERENCES `teacher` (`teacherid`) ON DELETE NO ACTION ON UPDATE NO ACTION)

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: javax.servlet.ServletException: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`exam`.`test`, CONSTRAINT `testteacherid` FOREIGN KEY (`teacherid`) REFERENCES `teacher` (`teacherid`) ON DELETE NO ACTION ON UPDATE NO ACTION)
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:555)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:461)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
root cause

javax.servlet.ServletException: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`exam`.`test`, CONSTRAINT `testteacherid` FOREIGN KEY (`teacherid`) REFERENCES `teacher` (`teacherid`) ON DELETE NO ACTION ON UPDATE NO ACTION)
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:909)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:838)
    org.apache.jsp.saveTest_jsp._jspService(saveTest_jsp.java:151)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
root cause

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`exam`.`test`, CONSTRAINT `testteacherid` FOREIGN KEY (`teacherid`) REFERENCES `teacher` (`teacherid`) ON DELETE NO ACTION ON UPDATE NO ACTION)
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    com.mysql.jdbc.Util.getInstance(Util.java:408)
    com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935)
    com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
    com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.ja

最佳答案

这个错误非常简单。它给出了违反约束的错误。仅当子表在具有外键关系的列中插入值并且引用外部表没有该值时,通常才会发生这种情况。

列“testteacherid”应具有表“teacher”的“teacherid”列的值之一。

“无法添加或更新子行:外键约束失败 (exam.test, CONSTRAINT testteacherid FOREIGN KEY (teacherid) 引用 teacher (teacherid) 删除时无操作,更新时无操作)”。

问题不在于您的代码,而在于您尝试插入的数据值。 父表必须具有子表引用的值。

如果您同时提供表值和要插入的新值,我们可以指出插入值中的错误。

关于java - mysql 约束错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45638304/

相关文章:

java - 如何从 APi.ai 的 Java SDK 获取 Json

java - Lambda 表达式还是方法引用?

java - 我可以设置一个仅具有查看权限的 .doc 文件(无复制内容,不可编辑)。我可以在 .java 文件中执行相同的操作吗?

python - 如何在 celery 中处理 MySQL 故障转移

php - 更新 mysql 数据库密码字段安全性

mysql - 如何在 Spring JpaRepository 中使用自定义 DTO 进行可分页响应

mysql - UPDATE INNER JOIN SELECT STATEMENT 不起作用。我的语法正确吗?

java - 需要有关 Java 中通配符泛型类型的帮助

mysql - 聚合函数的返回值

sql - ON [PRIMARY] 是什么意思?