背景与问题描述:
项目环境:jfinal:3.5,druid:1.0.29,oracle11g 驱动:ojdbc6.jar
项目开发完成时切换到Oracle 11g数据库时,某张表save的时候发生SQL异常,奇怪的是同一个映射文件中的其他表插入时没有问题.(H表有问题,Zrz表没有问题)异常发生点:
Model类的523行,异常详情附在最后.调查思路:
初步怀疑是H表的主键或字段有特殊性,经调查,与Zrz一致,排除这种可能
然后怀疑是我们自行封装的框架bug,然后移除我们对框架修改的痕迹,问题依旧
尝试使用Db.save方法保存,问题依旧,而Zrz表无论是.save 还是db.save,都能毫无问题的插入,H表两种方法保存都报错,这就有意思了,开始怀疑是驱动和druid版本的问题,换最新版和其他版本,问题依旧,开始又怀疑是表的特殊性.后将表改名为Room,问题排除.结论:
oracle 11g 数据库,在表名只有一个字母时,会产生异常,建议表名带有统一前缀com.jfinal.plugin.activerecord.ActiveRecordException: java.sql.SQLException: 调用中的无效参数扩展:
虽然单字母表名在一般的项目中不太容易出现,但是不明白为什么会出现这种问题,是驱动的问题?jdbc连接的问题?还是activeRecord的问题?希望大神能点拨一下.
com.jfinal.plugin.activerecord.ActiveRecordException: java.sql.SQLException: 调用中的无效参数
at com.jfinal.plugin.activerecord.DbPro.save(DbPro.java:647)
at com.jfinal.plugin.activerecord.DbPro.save(DbPro.java:657)
at com.jfinal.plugin.activerecord.Db.save(Db.java:463)
at com.chris.zrz.ZrzService.importZrzFromCh(ZrzService.java:407)
at com.chris.zrz.ZrzController.importZrzFromCh(ZrzController.java:122)
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 com.jfinal.aop.Invocation.invoke(Invocation.java:75)
at com.majian.framework.common.interceptor.EhCacheInterceptor.intercept(EhCacheInterceptor.java:22)
at com.jfinal.aop.Invocation.invoke(Invocation.java:69)
at com.majian.framework.common.interceptor.AuthInterceptor.intercept(AuthInterceptor.java:27)
at com.jfinal.aop.Invocation.invoke(Invocation.java:69)
at com.majian.framework.common.interceptor.UserInfoInterceptor.intercept(UserInfoInterceptor.java:51)
at com.jfinal.aop.Invocation.invoke(Invocation.java:69)
at com.majian.framework.common.interceptor.SiteInterceptor.intercept(SiteInterceptor.java:55)
at com.jfinal.aop.Invocation.invoke(Invocation.java:69)
at com.jfinal.ext.interceptor.SessionInViewInterceptor.intercept(SessionInViewInterceptor.java:44)
at com.jfinal.aop.Invocation.invoke(Invocation.java:69)
at com.jfinal.core.ActionHandler.handle(ActionHandler.java:81)
at com.jfinal.ext.handler.ContextPathHandler.handle(ContextPathHandler.java:48)
at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:86)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1634)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1340)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1242)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.Server.handle(Server.java:503)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:364)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.sql.SQLException: 调用中的无效参数
at oracle.jdbc.driver.AutoKeyInfo.getTableName(AutoKeyInfo.java:347)
at oracle.jdbc.driver.T4CConnection.doDescribeTable(T4CConnection.java:3823)
at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:6677)
at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:685)
at com.alibaba.druid.filter.FilterAdapter.connection_prepareStatement(FilterAdapter.java:962)
at com.alibaba.druid.filter.FilterEventAdapter.connection_prepareStatement(FilterEventAdapter.java:176)
at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:681)
at com.alibaba.druid.wall.WallFilter.connection_prepareStatement(WallFilter.java:344)
at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:681)
at com.alibaba.druid.filter.FilterAdapter.connection_prepareStatement(FilterAdapter.java:962)
at com.alibaba.druid.filter.FilterEventAdapter.connection_prepareStatement(FilterEventAdapter.java:176)
at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:681)
at com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl.prepareStatement(ConnectionProxyImpl.java:366)
at com.alibaba.druid.pool.DruidPooledConnection.prepareStatement(DruidPooledConnection.java:485)
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 com.jfinal.plugin.activerecord.SqlReporter.invoke(SqlReporter.java:58)
at com.sun.proxy.$Proxy5.prepareStatement(Unknown Source)
at com.jfinal.plugin.activerecord.DbPro.save(DbPro.java:618)
at com.jfinal.plugin.activerecord.DbPro.save(DbPro.java:645)
... 47 more