我正在使用Play框架(JAVA)连接到MYSQL . 在与数据库交互时,我会出现间歇性(20%)错误,但异常:

play.api.http.HttpErrorHandlerExceptions $$ anon $ 1:执行异常[[NullPointerException:null]] at play.api.http.HttpErrorHandlerExceptions $ .throwableToUsefulException(HttpErrorHandler.scala:265)〜[play_2.10-2.4.2 . jar:2.4.2] at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:191)〜[play_2.10-2.4.2.jar:2.4.2] at play.api.GlobalSettings $ class.onError( GlobalSettings.scala:179)[play_2.10-2.4.2.jar:2.4.2] at play.api.DefaultGlobal $ .onError(GlobalSettings.scala:212)[play_2.10-2.4.2.jar:2.4 . 2] at play.api.http.GlobalSettingsHttpErrorHandler.onServerError(HttpErrorHandler.scala:94)[play_2.10-2.4.2.jar:2.4.2] at play.filters.cors.AbstractCORSPolicy $$ anonfun $ 1.applyOrElse(AbstractCORSPolicy .scala:151)[filters-helpers_2.10-2.4.2.jar:2.4.2] at play.filters.cors.AbstractCORSPolicy $$ anonfun $ 1.applyOrElse(AbstractCORSPolicy.scala:150)[filters-helpers_2.10- 2.4.2.jar:2.4.2] scala.concurrent.Future $$ anonfun $ recoverWith $ 1.apply(Future.scala:344)[scala-library-2.1 0.5.jar:na] at scala.concurrent.Future $$ anonfun $ recoverWith $ 1.apply(Future.scala:343)[scala-library-2.10.5.jar:na] at scala.concurrent.impl.CallbackRunnable.run (Promise.scala:32)[scala-library-2.10.5.jar:na] at play.api.libs.iteratee.Execution $ trampoline $ .execute(Execution.scala:70)[play-iteratees_2.10-2.4 .2.jar:2.4.2]在scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:40)[scala-library-2.10.5.jar:na] scala.concurrent.impl.Promise $ DefaultPromise . tryComplete(Promise.scala:248)[scala-library-2.10.5.jar:na] at scala.concurrent.Promise $ class.tryFailure(Promise.scala:112)[scala-library-2.10.5.jar:na ] scala.concurrent.impl.Promise $ DefaultPromise.tryFailure(Promise.scala:153)[scala-library-2.10.5.jar:na] at play.api.mvc.Filter $$ anon $ 1 $$ anonfun $ apply $ 4 $$ anonfun $ apply $ 1.applyOrElse(Filters.scala:67)[play_2.10-2.4.2.jar:2.4.2] at play.api.mvc.Filter $$ anon $ 1 $$ anonfun $ apply $ 4 $ $ anonfun $在scala.run上应用$ 1.applyOrElse(Filters.scala:61)[play_2.10-2.4.2.jar:2.4.2] time.AbstractPartialFunction.apply(AbstractPartialFunction.scala:33)[scala-library-2.10.5.jar:na] at play.api.libs.iteratee.Iteratee $$ anonfun $ recoverM $ 1.applyOrElse(Iteratee.scala:629) [play-iteratees_2.10-2.4.2.jar:2.4.2] at play.api.libs.iteratee.Iteratee $$ anonfun $ recoverM $ 1.applyOrElse(Iteratee.scala:629)[play-iteratees_2.10-2.4 .2.jar:2.4.2]在scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:33)[scala-library-2.10.5.jar:na] scala.util.Failure $$ anonfun $ recover $ 1 . 申请(Try.scala:185)[scala-library-2.10.5.jar:na]在scala.util.Try $ .apply(Try.scala:161)[scala-library-2.10.5.jar:na]在scala.util.Failure.recover(Try.scala:185)[scala-library-2.10.5.jar:na] scala.concurrent.Future $$ anonfun $ recover $ 1.apply(Future.scala:324)[ scala-library-2.10.5.jar:na] at scala.concurrent.Future $$ anonfun $ recover $ 1.apply(Future.scala:324)[scala-library-2.10.5.jar:na] at scala.concurrent .impl.CallbackRunnable.run(Promise.scala:32)[scala-library-2.10.5.jar:na] at akka.d ispatch.BatchingExecutor $ AbstractBatch.processBatch(BatchingExecutor.scala:55)[akka-actor_2.10-2.3.11.jar:na] at akka.dispatch.BatchingExecutor $ BlockableBatch $$ anonfun $ run $ 1.apply $ mcV $ sp( BatchingExecutor.scala:91)[akka-actor_2.10-2.3.11.jar:na] at akka.dispatch.BatchingExecutor $ BlockableBatch $$ anonfun $ run $ 1.apply(BatchingExecutor.scala:91)[akka-actor_2.10 -2.3.11.jar:na] at akka.dispatch.BatchingExecutor $ BlockableBatch $$ anonfun $ run $ 1.apply(BatchingExecutor.scala:91)[akka-actor_2.10-2.3.11.jar:na] at scala . concurrent.BlockContext $ .withBlockContext(BlockContext.scala:72)[scala-library-2.10.5.jar:na] at akka.dispatch.BatchingExecutor $ BlockableBatch.run(BatchingExecutor.scala:90)[akka-actor_2.10- 2.3.11.jar:na] at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40)[akka-actor_2.10-2.3.11.jar:na] at akka.dispatch.ForkJoinExecutorConfigurator $ AkkaForkJoinTask.exec(AbstractDispatcher .scala:397)[akka-actor_2.10-2.3.11.jar:na] at scala.concurrent.forkjoin.ForkJoinTask.doExec(For kJoinTask.java:260)scala.concurrent.forkjoin.ForkJoinPool上的[scala-library-2.10.5.jar:na] $ WorkQueue.runTask(ForkJoinPool.java:1339)[scala-library-2.10.5.jar:na ]在scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)[scala-library-2.10.5.jar:na] atscala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)[scala-library-2.10.5.jar:na]引起:java.lang.NullPointerException:null at com.mysql.jdbc.ResultSetImpl.checkColumnBounds( ResultSetImpl.java:826)~ [mysql-connector-java-5.1.27.jar:na] at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2711)〜[mysql-connector-java-5.1.27 .jar:na] at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2847)〜[mysql-connector-java-5.1.27.jar:na] at com.zaxxer.hikari.proxy.ResultSetJavassistProxy.getInt (ResultSetJavassistProxy.java)〜[HikariCP-2.3.7.jar:na] at org.hibernate.type.descriptor.sql.IntegerTypeDescriptor $ 2.doExtract(IntegerTypeDescriptor.java:61)〜[hibernate-core-3.6.9.Final .jar:3.6.9.Final]在org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)〜[hibernate-core-3.6.9.Final.jar:3.6.9.Final]在org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:254)〜[hibernate-core-3.6.9.Final.jar:3.6 . 9.Final]在org.hibernate.type.AbstractStandardBasicType的org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:250)~ [hibernate-core-3.6.9.Final.jar:3.6.9.Final] . nullSafeGet(AbstractStandardBasicType.java:230)〜[hibernate-core-3.6.9.Final.jar:3.6.9.Final] org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:331)~ [hibernate-core -3.6.9.Final.jar:3.6.9.Final] at org.hibernate.loader.Loader.extractKeysFromResultSet(Loader.java:668)~ [hibernate-core-3.6.9.Final.jar:3.6.9 . 最终]在org.hibernate.loader.doQuery的org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:606)〜[hibernate-core-3.6.9.Final.jar:3.6.9.Final] Loader.java:829)〜[hibernate-core-3.6.9.Final.jar:3.6.9.Final] org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)〜[hibernate-core-3.6 .9.Final.jar:3.6.9.Final]在org.hibernate.loader.Loader.doList(Loader.java:2542)〜[hibernate-core-3.6.9.Final.jar:3.6.9.Final] org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)〜[hibernate-core-3.6.9.Final.jar:3.6.9.Final] org.hibernate.loader.Loader.list(Loader . java:2271)〜[hibernate-core-3.6.9.Final.jar:3.6.9.Final]在org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:459)〜[hibernate-core-3.6 .9.Final.jar:3.6.9.Final]在org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:365)〜[hibernate-core-3.6.9.Final.jar:3.6.9 . 最终]在org.hibernate.impl.SessionImpl的org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)〜[hibernate-core-3.6.9.Final.jar:3.6.9.Final] . 列表(SessionImpl.java:1268)〜[hibernate-core-3.6.9.Final.jar:3.6.9.Final]在org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)〜[hibernate-core -3.6.9.Final.jar:3.6.9.Final] at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:246)~ [hibernate-entitymanager-3.6.9.Final.jar:3.6.9 . 最终]在inter.ors上的service.UserService.getSessionById(UserService.java:40)〜[classes /:na] .SecuredAction.call(SecuredAction.java:26)〜[classes /:na]

最初的原因来自Null指针异常

com.mysql.jdbc.ResultSetImpl.checkColumnBounds(ResultSetImpl.java:826)

jar中的方法如下:

/**
  802        * Checks if columnIndex is within the number of columns in this result set.
  803        * 
  804        * @param columnIndex
  805        *            the index to check
  806        * 
  807        * @throws SQLException
  808        *             if the index is out of bounds
  809        */
  810       protected final void checkColumnBounds(int columnIndex) throws SQLException {
  811           if ((columnIndex < 1)) {
  812               throw SQLError.createSQLException(Messages.getString(
  813                       "ResultSet.Column_Index_out_of_range_low", new Object[] {
  814                               Constants.integerValueOf(columnIndex),
  815                               Constants.integerValueOf(this.fields.length) }),
  816                       SQLError.SQL_STATE_ILLEGAL_ARGUMENT, getExceptionInterceptor()); //$NON-NLS-1$
  817           } else if ((columnIndex > this.fields.length)) {
  818               throw SQLError.createSQLException(Messages.getString(
  819                       "ResultSet.Column_Index_out_of_range_high", new Object[] {
  820                               Constants.integerValueOf(columnIndex),
  821                               Constants.integerValueOf(this.fields.length) }),
  822                       SQLError.SQL_STATE_ILLEGAL_ARGUMENT, getExceptionInterceptor()); //$NON-NLS-1$
  823           }
  824   
  825           if (this.profileSql || this.useUsageAdvisor) {
  826               this.columnUsed[columnIndex - 1] = true;
  827           }
  828       }

我无法弄清楚失败的原因是什么,因为设置在80%的呼叫上完美运行 .

之后发生此错误

javax.persistence.PersistenceException:org.hibernate.exception.GenericJDBCException:无法打开连接

我试图分别弄清楚它们是否相关,但如果连接不存在且“this”为空,那么代码是否应该在第826行之前断开?

任何人都可以帮助识别错误?提前致谢 .