首先我的程序的目的是想把存储过程执行完后的结果集(或更新数)显示出来,程序如下String sql = "{call Test()}";
CallableStatement cstmt = conn.prepareCall(sql);
ResultSet rs = null;
int count = -1;
boolean result = cstmt.execute();

do
{
         if(result==true)  //如果是ResultSet类型
{
rs = cstmt.getResultSet();  //获取结果集
System.out.println("ResultSet:");
while(rs.next())
{
System.out.println(rs.getInt(1));
}
rs.close();
}
else //是更新数类型
{
count = cstmt.getUpdateCount();  //获取更新数
if(count!=-1)
        System.out.println("Count:"+count);
else //既不是ResultSet类型,也不是更新数,退出
break;
}

result = cstmt.getMoreResults(); //下一结果集类型

while(true);在sybase下的存储过程:1.
create procedure Test
as
update AA set CONTENT='good' where AA_ID=11输出:
Count:1
Count:0奇怪怎么多了个  Count:0  输出????????????????2.
而如果把存储过程改为:
create procedure Test
as
select count(AA_ID) from AA输出:
ResultSet:
11这是正确的。3.
如果把两个结合在一起:
create procedure Test
as
update AA set CONTENT='good' where AA_ID=11
select count(AA_ID) from AA输出则为
Count:1
ResultSet:
11
Count:0奇怪 最后又多了一个 Count:0 ???????????????????就是说明,凡是update等的更新数时,怎么都多了个 0 出来??

解决方案 »

  1.   

    boolean result = cstmt.execute();
    这个是什么意思?
      

  2.   

    附上一些方法返回值的意义:CallableStatement.execute()
    true if the first result is a ResultSet object; false if the first result is an update count or there is no resultgetMoreResults()
    true if the next result is a ResultSet object; false if it is an update count or there are no more resultsgetUpdateCount()
    the current result as an update count; -1 if the current result is a ResultSet object or there are no more resultsgetResultSet()
    the current result as a ResultSet object or null if the result is an update count or there are no more results
      

  3.   

    还从来没用过CallableStatement 嘿嘿~
    听说最好是利用Java来写,不要在SQL里写...