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: '{' 附近有语法错误。
<%@ 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: '{' 附近有语法错误。
这个是我的用法你的存储过程User updatePassWord这样命名好像不对啊
你存储过程名称中怎么有空格,如果你的User为一个包,也应该是User. updatePassWord(?,?,?,?),
在说User是关键字,不能用这个名字。
我的存储过程名为: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
表示是程序在执行sql语句的时候出现异常了,照成异常的原因是出现了一个它无法理解的{,解决方法是找到相关的sql语句,检查是否写错了。
小技巧,在String sql="slelct *……";的下一句用System.out.println(sql);把sql语句打印出来,把其中的?参数改成相关值,到sqlserver的查询器里运行一下,看看是哪里错了。
你说的执行成功了 列表里没有 那就刷新看下
com.microsoft.sqlserver.jdbc.SQLServerException: 找不到存储过程 'UserUpdatePassWord'。但是这个存储过程我执行并且成功了,但就是数据库项目的存储过程列表中没有显示 ,刷新了N次都没有显示。在把这个存储过程执行,数据库报错:消息 2714,级别 16,状态 3,过程 UserUpdatePassWord,第 13 行
数据库中已存在名为 'UserUpdatePassWord' 的对象。
我就不明白,为什么这个存储过程执行成功了,为什么存储过程列表中没有显示?