mysql约束错误
问题描述:
我正在构建一个jsp项目,并且为它创建了一个数据库,其中包含多个表和外键。 和我做了一个简单的页面插入一些实体在我的表中,但我得到了这个错误。自从一周以来我一直在使用jsp,之前我在数据库表中插入了实体,但从未得到这个错误,我已经搜索了很多关于这个但仍然在这个错误中的webbed。请帮我解决这个问题,并告诉我我错在哪里。mysql约束错误
<%@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
,约束testteacherid
外键(teacherid
)参考文献teacher
(teacherid
)ON DELETE NO ACTION ON UPDATE NO ACTION)”。
它的问题与您的代码没有关系,它与您尝试插入的数据值有关。 父表必须具有子表引用的值。
如果你会给你想同时插入表值和新的价值观,我们就可以在插入值指出错误。
+0
非常感谢你的帮助。 – rango
阅读邮件,几个数据库的问题(列,表),我们不能说withou功能的Java代码和数据库结构 –
它看起来像你试图插入一个测试,老师不在数据库中存在。 –
我编辑了问题并在其中添加了查询页面。 – rango