我正在构建一个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/