我调用了个存储过程
String sql = "{call afw_dailyupdatefee ?}";
try {
     jdbcTemplate.execute(sql, new CallableStatementCallback(){
public Object doInCallableStatement(CallableStatement cs) throws SQLException{
         cs.setString(1, type);
         cs.execute();
return null;
}
});
} catch (DataAccessException e) {
e.printStackTrace();
log.error("afw_dailyupdatefee Save error !"+e.getLocalizedMessage(),e);
}
我在tommcat下运行一切OK   然后我他项目打成war包  发布到weblogic中启动  再次运行的时候报错,Log在下面,求高手帮解决rg.springframework.jdbc.BadSqlGrammarException: CallableStatementCallback; bad SQL grammar [{call afw_dailyupdatefee ?}]; nested exception is java.sql.SQLException: [BEA][SQLServer JDBC Driver][SQLServer]第 1 行: '{' 附近有语法错误。
Caused by: 
java.sql.SQLException: [BEA][SQLServer JDBC Driver][SQLServer]第 1 行: '{' 附近有语法错误。
at weblogic.jdbc.base.BaseExceptions.createException(Unknown Source)
at weblogic.jdbc.base.BaseExceptions.getException(Unknown Source)
at weblogic.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
at weblogic.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
at weblogic.jdbc.sqlserver.tds.TDSRPCRequest.processReplyToken(Unknown Source)
at weblogic.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
at weblogic.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
at weblogic.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
at weblogic.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
at weblogic.jdbc.base.BasePreparedStatement.postImplExecute(Unknown Source)
at weblogic.jdbc.base.BaseStatement.commonExecute(Unknown Source)
at weblogic.jdbc.base.BaseStatement.executeInternal(Unknown Source)
at weblogic.jdbc.base.BasePreparedStatement.execute(Unknown Source)
at weblogic.jdbc.wrapper.PreparedStatement.execute(PreparedStatement.java:98)
at com.saicfc.auditFee.dao.hibernate.AuditFeeInfoDaoHibernate$1.doInCallableStatement(AuditFeeInfoDaoHibernate.java:205)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:842)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:871)
at com.saicfc.auditFee.dao.hibernate.AuditFeeInfoDaoHibernate.saveAuditFee(AuditFeeInfoDaoHibernate.java:202)
at com.saicfc.auditFee.service.impl.AuditFeeInfoManagerImpl.saveAuditFee(AuditFeeInfoManagerImpl.java:316)
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 org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:203)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:162)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:209)
at $Proxy190.saveAuditFee(Unknown Source)
at com.saicfc.auditFee.webapp.action.AuditFeeCheckController.handleRequest(AuditFeeCheckController.java:69)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:45)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:806)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:736)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:396)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:360)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.newtouch.webapp.filter.UserFilter.doFilter(UserFilter.java:62)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.newtouch.webapp.filter.GZIPFilter.doFilterInternal(GZIPFilter.java:42)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.newtouch.webapp.filter.LocaleFilter.doFilterInternal(LocaleFilter.java:58)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.opensymphony.clickstream.ClickstreamFilter.doFilter(ClickstreamFilter.java:42)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3496)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(Unknown Source)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2180)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2086)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1406)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)

解决方案 »

  1.   

    You are calling a parameterised query (looks like a stored proc with an input parameter). As your target database is SQL Server, the syntax of calling a stored proc is exec Proc ... rather than call Proc ...What's more, I don't see anywhere in your code that you have set the parameter type and value.
      

  2.   

    cs.setString(1, type);我这里传进去参数了的   类型String   值是type
      

  3.   

    String sql = "{call afw_dailyupdatefee ?}";
    {call afw_dailyupdatefee ?}定义了一个什么?把定义拿出来看看吧,
    应该是这个东东定义出了问题。
      

  4.   

    bad SQL grammar [{call afw_dailyupdatefee ?}].已经很明确地告诉了你,这不是一个SQL语句,OK?所以问题就出在这里了,我上一次的答案是没有错的/
      

  5.   

    自己解决了 各位  谢谢String sql = "{call afw_dailyupdatefee ?}";
    {call afw_dailyupdatefee ?}
    call存储过程时传递参数要加括号   tommcat中不会错的   但weblogic中会报错  weblogic中应该是{call afw_dailyupdatefee (?)}