create procedure register
@username varchar(20),
@password varchar(20),
@realName varchar(20),
@sex varchar(8)
as
declare @return int
insert into users values(@username,@password,@realName,@sex)
set * from users
select @return as aexec register 'aa','aa','aa','男' ----结果返回1
CallableStatement csta=null;
ResultSet res=null;
try
{
csta=GetConnection().prepareCall("{call dbo.register1(?,?,?,?)}");
                        psta.setObject(1, "aa");
                        psta.setObject(2, "bb");
                        psta.setObject(3, "cc");
                        psta.setObject(4, "dd");
res=csta.executeQuery();
return res;
}
catch(Exception ex)
{
System.out.println("dddd");
ex.printStackTrace();
return null;
}结果报错 : 该语句没有返回结果集。哪位高手帮忙看下,当我的存储过程中只有一个查询操作时,程序可以正常运行,可是,在在存储过程上添加一个插入操作时就会报错了,请各位大侠帮忙解决下这个问题,不胜感激!!!

解决方案 »

  1.   

    CallableStatement csta=null; 
    bool flag = false;
    int res= -1; 
    try 

    csta=GetConnection().prepareCall("{call dbo.register1(?,?,?,?)}"); 
                            psta.setObject(1, "aa"); 
                            psta.setObject(2, "bb"); 
                            psta.setObject(3, "cc"); 
                            psta.setObject(4, "dd"); 
    flag=csta.execute();
    if(!flag){
       res = cata.getUpdateCount();
       return res;

      return 0;

    catch(Exception ex) 

    System.out.println("dddd"); 
    ex.printStackTrace(); 
    return 0; 
    } ---------------------------------------------------------------------------
    if(res == 0) 没有插入,可能是SQL语法等错误或DDL错误
    if(res == 1) OK.插入这个int 值不是你存储过程中定义的as a那个select语句返的。
    对于插入操作不需要你自己select 它的操作成功记录
    flag = csta.execute如果为true说明返回结果集,为flase说明返回了更新计数
    你下面的select操作实际上使这个存储过程返回了多结果集(更新操作返回的int也算一种结果)
    要想取到a值实际上要这样处理:http://blog.csdn.net/axman/archive/2006/07/07/887904.aspx
      

  2.   

    你是return的null,当然是你的错误啦。