2017-08-11 14 views
0

私は、JSPプロジェクトを構築していると私はいくつかのテーブルとその中の外部キーが含まれているそれのためのデータベースを作っています。 と私はテーブルにいくつかのエンティティを挿入する単純なページを作ったが、私はこのエラーがある。私は週にjspで作業しています。以前はデータベーステーブルにエンティティを挿入していましたが、このエラーは発生しませんでした。このエラーはまだ網羅されていますが、まだ網羅されていません。 Plsはこれで私を助け、どこが間違っているか教えてくれます。以下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 
+0

メッセージ、いくつかのデータベースの問題(列、テーブル)を読んで、私たちは、あなたがテストを挿入しようとしていると教師がDBに存在していないように見えますwithou機能Javaコードとデータベース構造 –

+0

と言うことはできません。 –

+0

質問を編集して質問ページを追加しました。 – rango

答えて

0

エラーはかなり単純です。その制約の違反エラーです。これは、通常、子テーブルが外部キー関係を持つ列に値を挿入し、外部テーブルを参照することがこの値を持たない場合にのみ発生します。

コラム「testteacherid」テーブル「先生」の「teacherid」列の値のいずれかを持っている必要があります。

"追加または子行を更新できません:外部キー制約が失敗した(。examtestは、CONSTRAINT testteacherid FOREIGN KEY(teacherid)はUPDATE ON NO ACTION NO ACTIONを削除しないON)teacherteacheridを参照します)"。

その問題はなく、あなたのコードで、それはあなたが挿入しようとしているデータ値についてです。 親テーブルには、子テーブルが参照している値が必要です。

あなたが挿入する両方のテーブル値と新しい値を与える場合は、我々は挿入値に誤りを指摘することができます。

+0

ご協力いただきありがとうございます。 – rango