调用存储过程,急。在线

lianglijiang 2003-09-29 02:05:02
.......
CallableStatement stmt=conn.prepareCall("{call getCustomerName(a,b)}");
ResultSet rset=null;
rset=stmt.executeQuery();//第一次产生结果集
....................
rset=stmt.executeQuery();//第二次产生结果集
.........
为什么用第二次的时候就报错?只用第一个是可以得到结果集的。
...全文
38 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
noratong 2003-10-06
  • 打赏
  • 举报
回复
不好意思,我友作了测试,不管清不清空上次的参数都一样可以运行。
我这有个例子运行的很好:
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection c = DriverManager.getConnection ("jdbc:microsoft:sqlserver://127.0.0.1;databasename=pubs;user=sa;pwd=");
CallableStatement ps = c.prepareCall("{call P_Select (?)}");
ps.setInt(1,1);
ResultSet rs = ps.executeQuery();
rs.next();
System.out.println("名字:"+rs.getString(2));
ps.clearParameters();
ps.setInt(1,3);
rs = ps.executeQuery();
rs.next();
System.out.println("名字:"+rs.getString(2));
照说跟你的是差不多的,不过你最好还是仔细检查一下你的。
noratong 2003-10-06
  • 打赏
  • 举报
回复
你在rset=stmt.executeQuery()两次调用之间是否重新设置了参数???如果重新设置了参数,那么你在重新设置参数之前是否清空了上次设置的参数???

把你的出错信息贴完整些,还有出错地方的代码也贴出来,这样找方便些。
remexer 2003-10-06
  • 打赏
  • 举报
回复
没有高手帮忙??
nm_2j 2003-09-30
  • 打赏
  • 举报
回复
rset=stmt.executeQuery();//第一次产生结果集
.......

if(rset != null) rset.close;
if(stmt != null) stmt.close;
.........
stmt=conn.prepareCall("{call getCustomerName(a,b)}");
rset=stmt.executeQuery();//第二次产生结果集
ukyer 2003-09-30
  • 打赏
  • 举报
回复
要close除非你在创建一个连接
lianglijiang 2003-09-30
  • 打赏
  • 举报
回复
另:
错误内容:
Value can not be converted to requested type.
lianglijiang 2003-09-30
  • 打赏
  • 举报
回复
另:
错误内容:
Value can not be converted to requested type.
lianglijiang 2003-09-30
  • 打赏
  • 举报
回复
用的是SQLserver数据库。在用第二次前先关闭我也试过的,也不行。
就算你用再新建一个reseltset rest2=stmt.executeQuery();然后用rset2也是不行的,除非用CallableStatement重新创建一个相同的stmt2,再用rset2调用stmt2。不知道大家有没有用过。如果是一般的SQL语句而不是存储过程那么用Statement而不是CallableStatement就是可以多次调用的。
有没有高手指点这个问题??多谢
lianglijiang 2003-09-30
  • 打赏
  • 举报
回复
nm_2j(夜奔),你的方法有一个问题,对固定参数的是可以这样做,但如果stmt=conn.prepareCall("{call getCustomerName(?,?)}");那么就不行了,你怎么去设置参数呢?重复两次还可以做,如果100次呢?
比如我要有个循环要执行100次,那怎么调用?

RomandAccessFile 2003-09-29
  • 打赏
  • 举报
回复
其实就是因为你关了所以才不行用的,把rset.close()去了,或,用两个连接,
yuqf2000 2003-09-29
  • 打赏
  • 举报
回复
你用的是什么数据库?
mtou 2003-09-29
  • 打赏
  • 举报
回复
CallableStatement stmt=conn.prepareCall("{call getCustomerName(a,b)}");
ResultSet rset=null;
rset=stmt.executeQuery();//第一次产生结果集
....................
rset.close();
rset=null;
rset=stmt.executeQuery();//第二次产生结果集
aweihappy 2003-09-29
  • 打赏
  • 举报
回复
你定义两个ResultSet就不会出错,或者一个,但在再次使用之前先close。
寒舍人 2003-09-29
  • 打赏
  • 举报
回复
在用第二个前,先关闭地一个

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧