1. ホーム
  2. Java

MySQLIntegrityConstraintViolationException、解決方法

2022-02-21 04:34:12

    本日、ユーザー削除を行った際、データベースのユーザーテーブルに、以下のように、初期状態では空でないと判断された状態フィールドが追加されました。

      しかし、データ追加を行う際に、どうしても状態が追加できないので、状態を空でないものとして選択したいのですが、直接空でないことをチェックし始めると、次の画像のようにエラーボックスがポップアップしてしまいます。

   私の ソリューション はい:まずフィールドの状態を削除し、次にフィールドの状態を追加します。

フィールドの状態を再追加すると、データテーブルのデータは次のようになります。

Javaのエンティティクラスとインターフェースも再生成されましたが(リバースエンジニアリングで生成しました)、実行時に以下のエラーが発生します。

Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException : Column 'state' cannot be null

; SQL []; Column 'state' cannot be null; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException : Column 'state' cannot be null] with root cause

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException : Column 'state' cannot be null

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:404 )

at com.mysql.jdbc.Util.getInstance( Util.java:387 )

at com.mysql.jdbc.SQLError.createSQLException( SQLError.java:932 )

at com.mysql.jdbc.MysqlIO.checkErrorPacket( MysqlIO.java:3878 )

at com.mysql.jdbc.MysqlIO.checkErrorPacket( MysqlIO.java:3814 )

at com.mysql.jdbc.MysqlIO.sendCommand( MysqlIO.java:2478 )

at com.mysql.jdbc.MysqlIO.sqlQueryDirect( MysqlIO.java:2625 )

at com.mysql.jdbc.ConnectionImpl.execSQL( ConnectionImpl.java:2551 )

at com.mysql.jdbc.PreparedStatement.executeInternal( PreparedStatement.java:1861 )

at com.mysql.jdbc.PreparedStatement.execute( PreparedStatement.java:1192 )

at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute( DruidPooledPreparedStatement.java:494 )

at sun.reflect.NativeMethodAccessorImpl.invoke0( Native Method )

at sun.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:62 )

at sun.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 )

at java.lang.reflect.Method.invoke( Method.java:498 )

at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke( PreparedStatementLogger.java:59 )

at com.sun.proxy.$Proxy42.execute(Unknown Source)

at org.apache.ibatis.executor.statement.PreparedStatementHandler.update( PreparedStatementHandler.java:46 )

at org.apache.ibatis.executor.statement.RoutingStatementHandler.update( RoutingStatementHandler.java:74 )

at org.apache.ibatis.executor.SimpleExecutor.doUpdate( SimpleExecutor.java:50 )

at org.apache.ibatis.executor.BaseExecutor.update( BaseExecutor.java:117 )

at org.apache.ibatis.executor.CachingExecutor.update( CachingExecutor.java:76 )

at org.apache.ibatis.session.defaults.DefaultSqlSession.update( DefaultSqlSession.java:198 )

at org.apache.ibatis.session.defaults.DefaultSqlSession.insert( DefaultSqlSession.java:185 )

at sun.reflect.NativeMethodAccessorImpl.invoke0( Native Method )

at sun.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:62 )

at sun.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 )

at java.lang.reflect.Method.invoke( Method.java:498 )

at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke( SqlSessionTemplate.java:434 )

at com.sun.proxy.$Proxy20.insert(Unknown Source)

at org.mybatis.spring.SqlSessionTemplate.insert( SqlSessionTemplate.java:279 )

at org.apache.ibatis.binding.MapperMethod.execute( MapperMethod.java:57 )

at org.apache.ibatis.binding.MapperProxy.invoke( MapperProxy.java:53 )

at com.sun.proxy.$Proxy23.insert(Unknown Source)

at com.edu118.user.UserService.insertUser( UserService.java:41 )

at com.edu118.action.UserAction.addUser( UserAction.java:118 )

at sun.reflect.NativeMethodAccessorImpl.invoke0( Native Method )

at sun.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:62 )

at sun.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 )

at java.lang.reflect.Method.invoke( Method.java:498 )

at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke( InvocableHandlerMethod.java:205 )

at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest( InvocableHandlerMethod.java:133 )

at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle( ServletInvocableHandlerMethod.java:97 )

at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod( RequestMappingHandlerAdapter.java:827 )

at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal( RequestMappingHandlerAdapter.java:738 )

at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle( AbstractHandlerMethodAdapter.java:85 )

at org.springframework.web.servlet.DispatcherServlet.doDispatch( DispatcherServlet.java:967 )

at org.springframework.web.servlet.DispatcherServlet.doService( DispatcherServlet.java:901 )

at org.springframework.web.servlet.FrameworkServlet.processRequest( FrameworkServlet.java:970 )

at org.springframework.web.servlet.FrameworkServlet.doPost( FrameworkServlet.java:872 )

at javax.servlet.http.HttpServlet.service( HttpServlet.java:647 )

at org.springframework.web.servlet.FrameworkServlet.service( FrameworkServlet.java:846 )

at javax.servlet.http.HttpServlet.service( HttpServlet.java:728 )

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( ApplicationFilterChain.java:305 )

at org.apache.catalina.core.ApplicationFilterChain.doFilter( ApplicationFilterChain.java:210 )

at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal( CharacterEncodingFilter.java:197 )

at org.springframework.web.filter.OncePerRequestFilter.doFilter( OncePerRequestFilter.java:107 )

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( ApplicationFilterChain.java:243 )

at org.apache.catalina.core.ApplicationFilterChain.doFilter( ApplicationFilterChain.java:210 )

at org.apache.catalina.core.StandardWrapperValve.invoke( StandardWrapperValve.java:222 )

at org.apache.catalina.core.StandardContextValve.invoke( StandardContextValve.java:123 )

at org.apache.catalina.authenticator.AuthenticatorBase.invoke( AuthenticatorBase.java:502 )

at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:171 )

at org.apache.catalina.valves.ErrorReportValve.invoke( ErrorReportValve.java:99 )

at org.apache.catalina.valves.AccessLogValve.invoke( AccessLogValve.java:953 )

at org.apache.catalina.core.StandardEngineValve.invoke( StandardEngineValve.java:118 )

at org.apache.catalina.connector.CoyoteAdapter.service( CoyoteAdapter.java:408 )

at org.apache.coyote.http11.AbstractHttp11Processor.process( AbstractHttp11Processor.java:1023 )

at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process( AbstractProtocol.java:589 )

at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run( JIoEndpoint.java:310 )

at java.util.concurrent.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1142 )

at java.util.concurrent.ThreadPoolExecutor$Worker.run( ThreadPoolExecutor.java:617 )

at java.lang.Thread.run( Thread.java:745 )


フィールドのstateが見つからないというエラーが出たので、書いたコードを確認したところ、jspファイルにstateが追加されていなかったので、hiddenフィールド(

)


<form class="form-horizontal" id="addUserForm">
            

            <div class="form-group">
                <label for="username" class="col-sm-2 control-label"> Username: </label>
                <div class="col-sm-3">
                    <input type="text" class="form-control" id="username" name="username" placeholder="Please enter username">
                </div>
                <label class="control-label" id="usernameError" ></label>
            </div>
            <div class="form-group">
                <label for="password" class="col-sm-2 control-label">User password: </label>
                <div class="col-sm-3">
                    <input type="password" class="form-control" id="password" name="password" placeholder=" Please enter user password">
                </div>
                <label class="control-label" id="passwordError"></label>
            </div>
            <div class="form-group">
                <label for="conPassword" class="col-sm-2 control-label"> Confirm password: </label>
                <div class="col-sm-3">
                    <input type="password" class="form-control" id="conPassword" name="conPassword" placeholder= "Please enter your password again">
                </div>
                <label class="control-label" id="conPasswordError"></label>
            </div>
            <div class="form-group">
                <label for="level" class="col-sm-2 control-label"> Permissions set: </label>
                <div class="col-sm-3">
                    <select class="form-control" id="level" name="level">
                        <option value="">Please select permission</option>
                        <option value="0">Administrator</option>
                        <option value="1">Supervisor</option>
                        <option value="2">Warehouse clerk</option>
                        <option value="3">Supplier</option>
                        <option value="4">Customer</option>
                    </select>
                </div>
                <label class="control-label" id="levelError"></label>
            </div>
            <div class="form-group">
                <label for="marks" class="col-sm-2 control-label"> User information description: </label>
                <div class="col-sm-3"

その後、再実行すると、現在のユーザーがデータを追加でき、データベースのユーザーテーブルにデータが追加され、動作します。