2015-05-28 2 views
2

Я пытаюсь вызвать хранимую процедуру для создания элемента в таблице SQL. Когда код запускается, хранимая процедура запускается, и элемент создается, но генерирует эту ошибку. Значения, хранящиеся в таблице, являются правильными, а ключ генерации генерирует правильный ключ.Uncategorized SQLException Jdbc Template

Вот мой создать функцию, где я создаю карту параметров:

public int create(Job job) throws DataAccessException, NullPointerException { 
    Assert.notNull(job,"Job must not be null."); 
    Assert.notNull(job.getSite(),"Site must not be null."); 


    KeyHolder keyHolder = new GeneratedKeyHolder(); 
    final String columnNames[] = {"id"}; 

    MapSqlParameterSource params = params("intSiteId",job.getSite().getId()) 
      .addValue("dtmStart", job.getStartDate() == null ? null : dateTimeString(job.getStartDate())) 
      .addValue("dtmEnd", job.getEndDate() == null ? null : dateTimeString(job.getEndDate())) 
      .addValue("intManualFl",job.isManual()); 

    getTemplate().update(getSql("create"), params, keyHolder, columnNames); 


    return keyHolder.getKey().intValue(); 
} 

функция обновления, которая в NamedParameterJdbcTemplate Класс

@Override 
public int update(
     String sql, SqlParameterSource paramSource, KeyHolder generatedKeyHolder, String[] keyColumnNames) 
     throws DataAccessException { 

    ParsedSql parsedSql = getParsedSql(sql); 
    String sqlToUse = NamedParameterUtils.substituteNamedParameters(parsedSql, paramSource); 
    Object[] params = NamedParameterUtils.buildValueArray(parsedSql, paramSource, null); 
    List<SqlParameter> declaredParameters = NamedParameterUtils.buildSqlParameterList(parsedSql, paramSource); 
    PreparedStatementCreatorFactory pscf = new PreparedStatementCreatorFactory(sqlToUse, declaredParameters); 
    if (keyColumnNames != null) { 
     pscf.setGeneratedKeysColumnNames(keyColumnNames); 
    } 
    else { 
     pscf.setReturnGeneratedKeys(true); 
    } 
    return getJdbcOperations().update(pscf.newPreparedStatementCreator(params), generatedKeyHolder); 
} 

Исключение:

28 мая 2015 11:17:02 AM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() для сервлета [диспетчера] в контексте с путём [] выбрано исключение [Ошибка обработки запроса; Вложенное исключение - org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; не классифицированный SQLException для SQL [{вызов usp_createNewTrans (?,?,?,?)}]; Состояние SQL [null]; код ошибки [0]; Для обновления был создан результирующий набор; Вложенное исключение - com.microsoft.sqlserver.jdbc.SQLServerException: для обновления был создан результирующий набор.] с основной причиной com.microsoft.sqlserver.jdbc.SQLServerException: для обновления был создан результирующий набор. на com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError (SQLServerException.java:190) в com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement (SQLServerPreparedStatement.java:417) в com.microsoft.sqlserver.jdbc. SQLServerPreparedStatement $ PrepStmtExecCmd.doExecute (SQLServerPreparedStatement.java:350) в com.microsoft.sqlserver.jdbc.TDSCommand.execute (IOBuffer.java:5696) в com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand (SQLServerConnection.java: 1715) на com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand (SQLServerStatement.java:180) на com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement (SQLServerStatement.java:155) на com.microsoft.sqlserver. JDB c.SQLServerPreparedStatement.executeUpdate (SQLServerPreparedStatement.java:314) на org.apache.commons.dbcp2.DelegatingPreparedStatement.executeUpdate (DelegatingPreparedStatement.java:98) на org.apache.commons.dbcp2.DelegatingPreparedStatement.executeUpdate (DelegatingPreparedStatement.java: 98) в org.springframework.jdbc.core.JdbcTemplate $ 3.doInPreparedStatement (JdbcTemplate.java:946) в org.springframework.jdbc.core.JdbcTemplate $ 3.doInPreparedStatement (JdbcTemplate.java:943) в org.springframework. jdbc.core.JdbcTemplate.execute (JdbcTemplate.java:644) на org.springframework.jdbc.core.JdbcTemplate.update (JdbcTemplate.java:943) в org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update (NamedParameterJdbcTemplate.java:344) at com.crown.datapoint.services.dao.JobDAO.create (JobDAO.java:94) at com.crown.datapoint.services.JobService.create (JobService.java:91) at com.crown.datapoint. web.controller.JobRestController.createJob (JobRestController.java:63) на sun.reflect.NativeMethodAccessorImpl.invoke0 (нативный метод) на sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethodAccessorImpl .invoke (DelegatingMethodAccessorImpl.java:43) на java.lang.reflect.Method.invoke (Method.java:606) на org.springframework.web.method.support.InvocableHandlerMethod.doInvoke (InvocableHandlerMethod.java:221) на org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest (InvocableHandlerMetho д.Java: 137) на org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle (ServletInvocableHandlerMethod.java:110) в org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod (RequestMappingHandlerAdapter.java:777) на org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal (RequestMappingHandlerAdapter.java:706) в org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle (AbstractHandlerMethodAdapter.java:85) на org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:943) на org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:877) в орг. springframework.web.se rvlet.FrameworkServlet.processRequest (FrameworkServlet.java:966) на org.springframework.web.servlet.FrameworkServlet.doPost (FrameworkServlet.java:868) в javax.servlet.http.HttpServlet.service (HttpServlet.java:650) на org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:842) в javax.servlet.http.HttpServlet.service (HttpServlet.java:731) в org.apache.catalina.core.ApplicationFilterChain. internalDoFilter (ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) at org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:241) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:330) в org.springframework.security. web.access.intercept.FilterSecurityInterceptor.invoke (FilterSecurityInterceptor.java:118) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter (FilterSecurityInterceptor.java:84) at org.springframework.security.web. FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:342) на org.springframework.security.web.access.ExceptionTranslationFilter.doFilter (ExceptionTranslationFilter.java:113) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.ja ва: 342) в org.springframework.security.web.session.SessionManagementFilter.doFilter (SessionManagementFilter.java:103) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:342) в org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter (AnonymousAuthenticationFilter.java:113) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:342) в org.springframework.security. web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter (SecurityContextHolderAwareRequestFilter.java:154) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:342) в org.springframework.security.web.savedrequest.R equestCacheAwareFilter.doFilter (RequestCacheAwareFilter.java:45) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:342) в org.springframework.security.web.session.ConcurrentSessionFilter.doFilter (ConcurrentSessionFilter. Java: 125) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:342) в org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter (AbstractAuthenticationProcessingFilter.java:199) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:342) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter (LogoutFilter.java:110) at org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:342) в org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal (HeaderWriterFilter.java:57) в org.springframework.web.filter. OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:342) в org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter (SecurityContextPersistenceFilter. Java: 87) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:342) в org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal (WebAsyncManagerIntegrationFilter.java: 50)в org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:342) в org.springframework.security. web.FilterChainProxy.doFilterInternal (FilterChainProxy.java:192) на org.springframework.security.web.FilterChainProxy.doFilter (FilterChainProxy.java:160) на org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate (DelegatingFilterProxy.java: 344) в org.springframework.web.filter.DelegatingFilterProxy.doFilter (DelegatingFilterProxy.java:261) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:241) на org.apache.catalina. core.ApplicationFilterChain. doFilter (ApplicationFilterChain.java:208) на org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter.java:88) на org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) на org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve. invoke (StandardWrapperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:505) at org.apache.catalina.core.Stand ardHostValve.invoke (StandardHostValve.java:170) на org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:103) на org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:957) на org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:116) на org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:423) на org.apache.coyote.http11. AbstractHttp11Processor.process (AbstractHttp11Processor.java:1079) at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:620) at org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run (JIoEndpoint. java: 316) по адресу java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) на java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:615) на org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.java:61) на java.lang. Thread.run (Thread.java:745)

EDIT:

Я изменил мой код, чтобы это (смотри ниже), и это работает снова ... Я возвращаюсь 0 в restController, который первоначально показывает идентификатор как 0 ... но затем разрешает правильный идентификатор при обновлении страницы, но я чувствую, что это не совсем решение.

public int create(Job job) throws DataAccessException, NullPointerException { 
    Assert.notNull(job,"Job must not be null."); 
    Assert.notNull(job.getSite(),"Site must not be null."); 


    MapSqlParameterSource params = params("intSiteId",job.getSite().getId()) 
     .addValue("dtmStart", job.getStartDate() == null ? null : dateTimeString(job.getStartDate())) 
     .addValue("dtmEnd", job.getEndDate() == null ? null : dateTimeString(job.getEndDate())) 
     .addValue("intManualFl",job.isManual()); 

    getTemplate().update(getSql("create"), params); 


    return 0; 

}

ответ

0

Я столкнулся с той же проблемой, когда я позвонил в другие хранимые процедуры. Я изменил свой метод, вызвав хранимую процедуру следующим образом и, похоже, работает. Я не совсем уверен, как работает doInPreparedStatement, поэтому, вероятно, есть лучший способ использовать это, но это, похоже, решило мою проблему.

public int create(Job job) { 
    Assert.notNull(job,"Job must not be null."); 
    Assert.notNull(job.getSite(),"Site must not be null."); 


    MapSqlParameterSource params = params("intSiteId",job.getSite().getId()) 
      .addValue("dtmStart", job.getStartDate() == null ? null : dateTimeString(job.getStartDate())) 
      .addValue("dtmEnd", job.getEndDate() == null ? null : dateTimeString(job.getEndDate())) 
      .addValue("intManualFl",job.isManual()) 
      .addValue("insertDate",dateTimeString(DateTime.now(DateTimeZone.UTC))); 

    getTemplate().execute(getSql("create"), params, new PreparedStatementCallback<Boolean>(){ 
     @Override 
     public Boolean doInPreparedStatement(PreparedStatement ps) 
       throws SQLException, DataAccessException { 

      return 0; 
     } 
     }); 
    return (int)params.getValue("intSiteId"); 
} 
0

Не могли бы вы попросить стороны сервера следы или воспроизвести его на сервере, где следы могут быть включены? Поскольку неизвестная ошибка на стороне клиента может быть зарегистрирована более конкретно на вашем сервере SQL Server.

Смежные вопросы