java.sql.BatchUpdateException: Cannot add or update a child row: a foreign key constraint fails (`onlinetest`.`bus_answer`, CONSTRAINT `que_id` FOREIGN KEY (`que_id`) REFERENCES `bus_question` (`que_id`) ON DELETE CASCADE ON UPDATE CASCADE)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createBatchUpdateException(SQLError.java:1163)
at com.mysql.jdbc.StatementImpl.executeBatchInternal(StatementImpl.java:1060)
at com.mysql.jdbc.StatementImpl.executeBatch(StatementImpl.java:970)
at com.online.service.BusinessService.InsertQuestionAndAnswers(BusinessService.java:245)
at com.online.servlet3.business.BusinessQuestionServlet2.doPost(BusinessQuestionServlet2.java:159)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.online.filter.URLEncodeFilter.doFilter(URLEncodeFilter.java:27)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:651)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:501)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1376)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`onlinetest`.`bus_answer`, CONSTRAINT `que_id` FOREIGN KEY (`que_id`) REFERENCES `bus_question` (`que_id`) ON DELETE CASCADE ON UPDATE CASCADE)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2480)
at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1552)
at com.mysql.jdbc.StatementImpl.executeBatchInternal(StatementImpl.java:1034)
... 30 more
我是想把question表和answer表同時加資料,但是出現這個錯誤,查了資料以為清空資料就可以,但是問題依然存在,求大神們指條明路
uj5u.com熱心網友回復:
bus_answer的que_id參考bus_question的que_id;在插入一個que_id到bus_answer的時候,會檢查bus_question有沒有這個que_id,也就是你要先插父表,再查子表,先有父后有子,你怎么還反而去清空資料呢?
看下這個介紹吧:
https://blog.csdn.net/weixin_39004901/article/details/89088813
uj5u.com熱心網友回復:
現在是在從試卷界面添加題目沒有報錯,但是在題目界面添加會出現這個錯誤,這個錯誤它是表的錯還是中間環節的錯誤uj5u.com熱心網友回復:
我不知道你的試卷界面和題目界面的代碼邏輯是什么;你只要記住,如果想要往bus_answer表插入資料,首先要確保bus_question表里有對應的que_id,有一個先后順序,bus_answer表只能插入bus_question表已有的que_id。
uj5u.com熱心網友回復:
我覺得你的插入順序是不是有問題?先插入父表的資料再插入子表的資料。另外不建議加外鍵,由業務邏輯的事務來保證資料,影響性能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/60887.html
標籤:MySQL
