jsp代码为:
<%@ page language="java" import="java.sql.*,javax.sql.*" %>
<%@ page contentType="text/html; charset=gb2312"%>
<html>
<body>
<%
 try{
   //载入驱动程序字符串
   Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
   Connection conn=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=TestDemo","sa","123");
   //声明CallableStatement对象
   CallableStatement cstate=conn.prepareCall("{call User updatePassWord(?,?,?,?)}");
   //设置输入参数和注册输出参数
   cstate.setString(1,request.getParameter("userName"));
   cstate.setString(2,request.getParameter("oldPassword"));
   cstate.setString(3,request.getParameter("newPassword"));
   cstate.registerOutParameter(4,java.sql.Types.INTEGER);
   cstate.execute();//使用CallableStatement对象调用存储过程
   int result=cstate.getInt(4);
   if(result==1){
        out.println("密码修改成功");
   }
   else{
        out.println("密码修改失败");
   }
 }catch(SQLException e){
       out.println(e);
 }
%></body></html>IE报出的异常为:
com.microsoft.sqlserver.jdbc.SQLServerException: '{' 附近有语法错误。

解决方案 »

  1.   

    CallableStatement cstate=conn.prepareCall("{call User updatePassWord(?,?,?,?)}"); 这句有错 我没有用过这种用法 不太了解具体要求 你看看这个函数的API吧
      

  2.   

    额 不好意思 貌似没看到有用到CallableStatement类或prepareCall()函数..
      

  3.   

    conn.prepareCall("{call p_sjkh_init(?,?,?)}")
    这个是我的用法你的存储过程User updatePassWord这样命名好像不对啊
      

  4.   

    你的存储过程User updatePassWord这样命名是不正确的,User是系统的关键字,你改一下存储过程的名字就不会报这样的错误了
      

  5.   

    CallableStatement cstate=conn.prepareCall("{call 存储过程名称(?,?,?,?)}");
    你存储过程名称中怎么有空格,如果你的User为一个包,也应该是User. updatePassWord(?,?,?,?),
    在说User是关键字,不能用这个名字。
      

  6.   


    我的存储过程名为:UserupdataPassWord。 
    这句:CallableStatement cstate=conn.prepareCall("{call User updatePassWord(?,?,?,?)}");
     我改成了:CallableStatement cstate=conn.prepareCall("{call UserupdatePassWord(?,?,?,?)}");
    运行jsp后IE报出异常:com.microsoft.sqlserver.jdbc.SQLServerException: 找不到存储过程 'UserUpdatePassWord'。 我在数据库中有建立UserupdatePassWord的存储过程,执行成功了,但数据库列表中没有这个存储过程显示,但我在执行的时候提示该存储过程以存在:
    我的UserupdatePassWord存储过程的代码是:
    create procedure UserUpdatePassWord
    (@userName varchar(50),@oldPwd varchar(50),@newPwd varchar(50),@isUpdated int=0 output )
    as 
    select @oldPwd=UPass from [User] where UName=@userName
    if(@oldPwd is not null)
      begin
         update [User] set UPass=@newPwd where UName=@userName
         select @isUpdated=1
      end
    else 
      begin
        select @isUpdated=0
      end
    go   
      

  7.   

    com.microsoft.sqlserver.jdbc.SQLServerException: '{' 
    表示是程序在执行sql语句的时候出现异常了,照成异常的原因是出现了一个它无法理解的{,解决方法是找到相关的sql语句,检查是否写错了。
    小技巧,在String sql="slelct *……";的下一句用System.out.println(sql);把sql语句打印出来,把其中的?参数改成相关值,到sqlserver的查询器里运行一下,看看是哪里错了。
      

  8.   

    输出一下sql语句 看一下语句是否有错误
    你说的执行成功了 列表里没有  那就刷新看下
      

  9.   

    先刷新一下你的数据库,找找你的存储过程(貌似在可编程文件夹里,很久没用过sql server了),右键执行一下那个存储过程,记得输入参数。如果能执行那你的存储过程的确没问题,就是你程序的错误了,你的存储过程有没有在包里,如果在要带上包名。UserupdatePassWord你看一下这个名字对不对,update的u你怎么有时候大写有时候小写?
      

  10.   

    现在运行IE后的提示是:
    com.microsoft.sqlserver.jdbc.SQLServerException: 找不到存储过程 'UserUpdatePassWord'。但是这个存储过程我执行并且成功了,但就是数据库项目的存储过程列表中没有显示 ,刷新了N次都没有显示。在把这个存储过程执行,数据库报错:消息 2714,级别 16,状态 3,过程 UserUpdatePassWord,第 13 行
    数据库中已存在名为 'UserUpdatePassWord' 的对象。
    我就不明白,为什么这个存储过程执行成功了,为什么存储过程列表中没有显示?
      

  11.   

    那就删掉先删掉'UserUpdatePassWord'  然后在建