说一下今天在使用JFinal时遇到的问题,描述如下,
表象:在对一个用户对象进行持久化的时候报错,Model.save(obj)报错信息如下:
com.jfinal.plugin.activerecord.ActiveRecordException: java.lang.ArrayIndexOutOfBoundsException: 11 at com.jfinal.plugin.activerecord.Db.save(Db.java:628) at com.anst.controller.UserController.update(UserController.java:117) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.jfinal.core.ActionInvocation.invoke(ActionInvocation.java:55) at com.anst.interceptor.PrivilegeInterceptor.intercept(PrivilegeInterceptor.java:30) at com.jfinal.core.ActionInvocation.invoke(ActionInvocation.java:51) at com.anst.interceptor.AuthInterceptor.intercept(AuthInterceptor.java:36) at com.jfinal.core.ActionInvocation.invoke(ActionInvocation.java:51) at com.jfinal.ext.interceptor.SessionInViewInterceptor.intercept(SessionInViewInterceptor.java:44) at com.jfinal.core.ActionInvocation.invoke(ActionInvocation.java:51) at com.jfinal.core.ActionHandler.handle(ActionHandler.java:75) at com.jfinal.plugin.druid.DruidStatViewHandler.handle(DruidStatViewHandler.java:58) at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:72) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) at org.eclipse.jetty.server.Server.handle(Server.java:365) at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485) at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:937) at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:998) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:856) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) at java.lang.Thread.run(Thread.java:662)
在使用Db.save()方法测试后问题依旧,Debug后追踪到的错误代码为
PreparedStatement pst; if (DbKit.dialect.isOracle()) pst = conn.prepareStatement(sql.toString(), new String[]{primaryKey});
在直接运行生成的SQL后并无错误,这时候我想到可能是oracle jar版本的问题,测试库为oracle9i,之前我使用ojdbc14.jar,由于之前为了解决该库下使用ojdbc14.jar会导致Timestamp无法显示的问题,故换成了ojdbc6.jar。之后解决了Timestamp无法显示的问题。今天在遇到这个问题之后,我将jar换回了ojdbc14.jar,Model.save()方法可以正确执行。
如下是持久化的程序片段,当属性小于8个的时候,Db.save()就能执行,当属性设置多于8个的时候便会报java.lang.ArrayIndexOutOfBoundsException的错误 。此问题可能不是JFinal的问题,但是在这里我想找到最终的原因,请大家协助一下。
User u = new User(); u.set("id", "rcs_user_seq.nextval"); u.set("empno", user.getEmpno()); u.set("name", user.getName()); u.set("username", user.getUsername()); u.set("password", user.getPassword()); u.set("email", user.getEmail()); u.set("phone", user.getPhone()); u.set("createuserid", sessUser.getNumber("id").intValue()); u.set("modifyuserid", sessUser.getNumber("id")); u.set("groupid", user.getGroupid()); u.set("createdate", new java.sql.Date(new Date().getTime())); u.set("modifydate", new java.sql.Date(new Date().getTime())); u.save();
该问题已经解决:
解决方案为,使用最新版的jdbc驱动“Oracle数据库11g第2版JDBC驱动程序”,ojdbc6.jar替换之前可能是11g第一版的ojdbc6.jar.
恩驱动问题。。我以前也遇到过,但我想是否可以改善一下
PreparedStatementpst; |
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。