...
CallableStatement toesUp = null;
toesUp= conn.prepareCall("{call pagination(?,?,?,?,?,?) }");
toesUp.setString(1,strPerpagenumber);
toesUp.setString(2,strPagenumber);
toesUp.setString(3,strTablename);
toesUp.setString(4,strOrderby);
toesUp.setString(5,strSqlCondition);
toesUp.registerOutParameter(6,java.sql.Types.VARCHAR);
try
{
toesUp.execute();
ResultSet rs = (ResultSet) toesUp.getResultSet();
strTotalresult=toesUp.getString(6);
ResultSetMetaData rsmd = null;
...
}
SQL SERVER的存储过程是这样的
...
create procedure pagination
@perpagenumber varchar(10)='20',
@pagenumber varchar(10)='1',
@tablename varchar(20)='tmp_t_cs_infos_his',
@orderby varchar(200)='order by cust_code,backupdate',
@sqlcondition varchar(200)=''
@totalresult varchar(200) output
as
begin
...
select * from tmp_t_cs_infos_his
select @totalresult=count(*) from tmp_t_cs_infos_his
end
我跟踪调试的时候,会发现ResultSet rs = (ResultSet) toesUp.getResultSet()的rs为NULL值,但存储过程的返回参数的值能取到,不是空的。请高手帮帮忙啊
如果我去掉“存储过程的返回参数”就OK了,存储过程的返回的记录集就能取到(rs就不为空了)请问是什么原因啊?有解决的方法吗?
13 个解决方案
#1
请各位高手帮忙看看啊 诊断一下下啊
#2
我也遇到过,后来是用别方法解决的
#3
难道就没有办法了吗?
#4
试试这个:CallableStatement cstmt = Conn.prepareCall (SQL,java.sql.ResultSet.TYPE_SCROLL_SENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
ResultSet rs = cstmt.executeQuery();
ResultSet rs = cstmt.executeQuery();
#5
结果还是不行啊
#6
哪位仁兄知道解决这个问题啊?
#7
没人解决啊 真是那么难吗?
#8
sql server中具体我不知道,我用oracle的时候我是让他直接返回的是结果集合,页就是游标,这样一切ok!
#9
我今天也遇到这个问题了,我看了一下,主要是从存储过程中返回记录集后,再取存储过程返回值后,ResultSet会自动close,CallableStatement里有个KEEP_RESULTSET_OPEN参数,是static int的,帮助上写该参数的意思是可以保持ResultSet为open状态,但我也不知道怎么用。我所知道的就这么多了,若你找到答案后希望你也发条短消息给我,我也被这个问题困扰
#10
把过程中的结果集放到一个游标中,返回一个游标没问题了。
然后调用过程可以了。
然后调用过程可以了。
#11
结果集怎么放到游标中?楼上的能否给多点提示?
#12
等你的记录集的值抓完之后再取输出的参数就可以了!
我已经测试通过!
try
{
toesUp.execute();
ResultSet rs = (ResultSet) toesUp.getResultSet();
while(rs.next()) {
......
}
strTotalresult=toesUp.getString(6);
...
}
我已经测试通过!
try
{
toesUp.execute();
ResultSet rs = (ResultSet) toesUp.getResultSet();
while(rs.next()) {
......
}
strTotalresult=toesUp.getString(6);
...
}
#13
关注中………………
#1
请各位高手帮忙看看啊 诊断一下下啊
#2
我也遇到过,后来是用别方法解决的
#3
难道就没有办法了吗?
#4
试试这个:CallableStatement cstmt = Conn.prepareCall (SQL,java.sql.ResultSet.TYPE_SCROLL_SENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
ResultSet rs = cstmt.executeQuery();
ResultSet rs = cstmt.executeQuery();
#5
结果还是不行啊
#6
哪位仁兄知道解决这个问题啊?
#7
没人解决啊 真是那么难吗?
#8
sql server中具体我不知道,我用oracle的时候我是让他直接返回的是结果集合,页就是游标,这样一切ok!
#9
我今天也遇到这个问题了,我看了一下,主要是从存储过程中返回记录集后,再取存储过程返回值后,ResultSet会自动close,CallableStatement里有个KEEP_RESULTSET_OPEN参数,是static int的,帮助上写该参数的意思是可以保持ResultSet为open状态,但我也不知道怎么用。我所知道的就这么多了,若你找到答案后希望你也发条短消息给我,我也被这个问题困扰
#10
把过程中的结果集放到一个游标中,返回一个游标没问题了。
然后调用过程可以了。
然后调用过程可以了。
#11
结果集怎么放到游标中?楼上的能否给多点提示?
#12
等你的记录集的值抓完之后再取输出的参数就可以了!
我已经测试通过!
try
{
toesUp.execute();
ResultSet rs = (ResultSet) toesUp.getResultSet();
while(rs.next()) {
......
}
strTotalresult=toesUp.getString(6);
...
}
我已经测试通过!
try
{
toesUp.execute();
ResultSet rs = (ResultSet) toesUp.getResultSet();
while(rs.next()) {
......
}
strTotalresult=toesUp.getString(6);
...
}
#13
关注中………………