tomcat报错:“该语句没有返回结果集”

ALTERPROCEDURE[dbo].[by_zwx_cyt_ckzy]@zyfzrintasDECLARE@linshi_tableTable(zymcvarchar... ALTER PROCEDURE [dbo].[by_zwx_cyt_ckzy]
@zyfzr int
as
DECLARE @linshi_table Table(zymc varchar(40) null,zydm int null)
//--create table #linshi_table(zymc varchar(40) null,zydm int null)
declare @i int
declare @nj char(10),@bk char(10)
--游标的应用
declare pycc cursor for
SELECT nj, bk FROM dbo.by_njb WHERE (sd = 1)
open pycc
fetch next from pycc
into @nj,@bk
while @@fetch_status=0
begin
if @bk = 0
begin
--向表变量追加数据
INSERT INTO @linshi_table SELECT RTRIM(dbo.jwxt_zyb.zymc) AS zymc, dbo.by_zyfzr.zydm
FROM dbo.by_zyfzr INNER JOIN
dbo.by_njb ON dbo.by_njb.nj = dbo.by_zyfzr.nj INNER JOIN
dbo.jwxt_zyb ON dbo.by_zyfzr.zydm = dbo.jwxt_zyb.zydm
WHERE (dbo.by_njb.sd = 1) and (dbo.by_zyfzr.zyfzr = 761) AND jwxt_zyb.pycc='专科' and by_njb.nj=@nj

end
else if @bk= 1
begin
--向表变量追加数据
INSERT INTO @linshi_table SELECT RTRIM(dbo.jwxt_zyb.zymc) AS zymc, dbo.by_zyfzr.zydm
FROM dbo.by_zyfzr INNER JOIN
dbo.by_njb ON dbo.by_njb.nj = dbo.by_zyfzr.nj INNER JOIN
dbo.jwxt_zyb ON dbo.by_zyfzr.zydm = dbo.jwxt_zyb.zydm
WHERE (dbo.by_njb.sd = 1) and (dbo.by_zyfzr.zyfzr = @zyfzr) AND jwxt_zyb.pycc='本科' and by_njb.nj=@nj
end

fetch next from pycc
into @nj,@bk
end
close pycc
deallocate pycc
//--select zymc,zydm from #linshi_table
select zymc,zydm from @linshi_table[color=#FF0000]--输出结果集[/color]
//--drop table #linshi_table

*********************************

在sql数据库里面执行这个存储过程,是有结果输出的:
zymc zydm
计算机网络技术 27
数学与应用数学(师范) 51

**********************************
action类调用:
String sql="exec by_zwx_cyt_ckzy @zyfzr='"+dlfzr+"'";
//调用db.read(sql)方法执行sql语句
ResultSet rs = db.Read(sql);

********************
tomcat出错提示:
com.microsoft.sqlserver.jdbc.SQLServerException: [color=#FF0000]该语句没有返回结果集。[/color]
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:794)
at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:685)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:185)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:160)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(SQLServerStatement.java:620)
at mmc.bylw.tools.ConnectDB.Read(ConnectDB.java:75)
at mmc.bylw.dao.Bylw_fzr_dao.Bylw_chazhaozhuanye(Bylw_fzr_dao.java:36)
弄了两天,终于解决问题了,解铃还需系铃人,还是靠自己才行,说一下原因吧,免得后来人也要弄得那么烦。其实原因很简单的,就是Statement的问题,开始的时候我是用以下方法去返回ResultSet的:(注意rs = stm.executeQuery(sql);)
public ResultSet Read(String sql){
if(sql==null)sql="";
getStmed();
ResultSet rs=null;
rs = stm.executeQuery(sql);
用上面方法去执行我上面提到的存储过程的话,tomcat就会报错:该语句没有返回结果集。
************************************
但是后来我把public ResultSet Read(String sql)改成了这样:注意(stm.execute(sql);
rs = stm.getResultSet();)
stm.execute(sql);
rs = stm.getResultSet();
这样tomcat就不会报“该语句没有返回结果集”的错了
***********************************************************
原因总结:
1、execute(String sql) :
执行给定的 SQL 语句,该语句可能返回多个结果。
2、executeQuery(String sql) :
执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。
展开
 我来答
alicus
2010-02-04 · TA获得超过198个赞
知道答主
回答量:173
采纳率:0%
帮助的人:139万
展开全部
String sql="exec by_zwx_cyt_ckzy @zyfzr='"+dlfzr+"'";
这一句是不是应该改成String sql="exec by_zwx_cyt_ckzy "+dlfzr+";?
对了,你这个存储过程接收的参数是int型,所以dlfzr不需要加单引号:
String sql="exec by_zwx_cyt_ckzy "+dlfzr.toString()+";?
忘了int型有没有toString方法了,你可以再试试
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式