JDBC for MySQL驱动版本问题
2013-03-18 17:59
417 查看
对于低版本(3.1.8)的mysql驱动,其没有对int类型的字段做强制的非空检测,但是5.1版本为了安全增加了强制非空检测。这样当项目jdbc驱动包升级到5.1.16后会报如下错误:
由于项目中引入了两个版本,因此出现该问题在不同人机器上有不同表现,或者成功或者失败。最后将驱动包从项目中移除,然后放到tomcat/lib目录下解决。(原理可以参考tomcat类装载顺序,http://cailin.iteye.com/blog/151507,找到一个后不再加载其它。对于tomcat6之前版本可以放到common和shared目录下)。
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'XXXXXXXXXXX' cannot be null at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.Util.getInstance(Util.java:386) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1039) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3597) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1990) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2619) at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1698) at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1617) at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) at adultadmin.util.db.DbOperation.executeUpdate(DbOperation.java:237) at adultadmin.action.balance.ImportOrderBalanceAction.execute(ImportOrderBalanceAction.java:266) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1192) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:430) at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at adultadmin.util.filter.UserControlFilter.doFilter(UserControlFilter.java:109) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at adultadmin.util.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:139) 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:225) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662)
由于项目中引入了两个版本,因此出现该问题在不同人机器上有不同表现,或者成功或者失败。最后将驱动包从项目中移除,然后放到tomcat/lib目录下解决。(原理可以参考tomcat类装载顺序,http://cailin.iteye.com/blog/151507,找到一个后不再加载其它。对于tomcat6之前版本可以放到common和shared目录下)。
相关文章推荐
- MySQL版本,MySQL连接jdbc驱动版本与JDK版本问题
- MySQL版本与JDBC驱动的问题
- mysql 数据库8.0版本,jdbc驱动连接问题
- Mysql JDBC驱动版本与Mysql版本的对应问题
- Mysql JDBC驱动版本与Mysql版本的对应问题
- 关于解决"No suitable driver found for jdbc:mysql:/localhost:3306"问题的步骤
- 有关jdbc驱动的问题,java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
- 关于用jdbc访问云数据库mysql Access denied for user 'root'@'xxx.xxx.xxx.xxx' (using password: YES)问题
- jdbc链接5.7版本mysql的ssl问题
- 关于用Class.forName(“com.mysql.jdbc.Driver”)注册数据库驱动
- QT4.7.1版本 mysql驱动插件 编译的问题
- mysql 驱动的版本问题
- 使用连接mysql的jdbc驱动最新版引发的问题
- eclipese连接MySQL出错“Class.forName("com.mysql.jdbc.Driver")”问题解决
- MySQL JDBC驱动 - 01 - Class.forName
- 使用连接mysql的jdbc驱动最新版引发的问题
- 解决com.mysql.jdbc.PacketTooBigException: Packet for query is too large (3158064)问题
- 一键搞定python连接mysql驱动有关问题(windows版本)
- 解决com.mysql.jdbc.PacketTooBigException: Packet for query is too large (3158064)问题
- 在Maven仓库中添加Oracle JDBC驱动(原出处有些问题,进行更正:版本对应问题,如使用oci连接方式更要注意版本对应关系)