关于JAVA调用存储过程的问题,急急。。。

ggzzkk 2008-04-07 03:40:01
======================存储过程,数据库是Sybase
alter procedure
----- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
DBA.GetNextPInvLineRecordID(out nextID integer)
begin
select MAX(recordID)+1 into nextID from PInvLines;
if(nextID is null) then
set nextID=1
end if
end

======================程序
con = cp.getConn();
con.setAutoCommit(true);
CallableStatement proc = con.prepareCall("{ ? = call dba.GetNextPInvLineRecordID() }");
//CallableStatement proc = con.prepareCall("{ call dba.GetNextPInvLineRecordID(?) }"); 这里改成这样试过也不行
proc.registerOutParameter(1, Types.INTEGER);
boolean results = proc.execute();
System.out.println("results: "+results);
int cout = proc.getUpdateCount();
System.out.println("UpdateCount: "+cout);
ResultSet rs = proc.getResultSet();
while (rs!=null && rs.next())
{
System.out.println("1: " + rs.getString(1));
}
if( rs!=null ) rs.close();

打印出来的结果是:
results: false
UpdateCount: 0

直接运行存储过程,是有值返回的,但我用JAVA调用的时候,为什么没有返回值呢?弄了半天没有解决,请大家帮忙看看是什么地方有问题。谢谢了。
...全文
186 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
changjiangzhibin 2008-04-15
  • 打赏
  • 举报
回复
也可直接读记录集,将值取出
East271536394 2008-04-15
  • 打赏
  • 举报
回复
学习
贝壳鱼 2008-04-09
  • 打赏
  • 举报
回复
学习
fy_kenny 2008-04-09
  • 打赏
  • 举报
回复
CallableStatement proc = con.prepareCall("{ ? = call dba.GetNextPInvLineRecordID() }");
//CallableStatement proc = con.prepareCall("{ call dba.GetNextPInvLineRecordID(?) }"); 这里改成这样试过也不行

这两种情况结果应该是一样的。
你就一个参数应该不存在参数顺序对应问题。

你看看 为什么results是false?

或者在注册outparameter这里也容易出问题。
shili150 2008-04-09
  • 打赏
  • 举报
回复
友情帮顶

给分最好
J_Factory 2008-04-09
  • 打赏
  • 举报
回复
学习
ultimate_fancy 2008-04-09
  • 打赏
  • 举报
回复
存储过程的参数可以定义为out型的,通过此参数你就可以取得存储过程返回的结果。
wensheng_zh2007 2008-04-07
  • 打赏
  • 举报
回复
up
dracularking 2008-04-07
  • 打赏
  • 举报
回复
获取返回还是通过调用getter系方法 不是execute
haoxiongok 2008-04-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 java2000_net 的回复:]
通过 JDBC 驱动程序 - 使用带有输出参数的存储过程
[/Quote]
den88 2008-04-07
  • 打赏
  • 举报
回复

boolean results = proc.execute(); //这里能返回吗?
System.out.println("UpdateCount: "+cout); //这里
if( rs!=null ) rs.close(); 条件

通过 JDBC 驱动程序 - 使用带有输出参数的存储过程
写个方法
返到到一个你想用地方
den88 2008-04-07
  • 打赏
  • 举报
回复
======================存储过程,数据库是Sybase 
alter procedure
----- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
DBA.GetNextPInvLineRecordID(out nextID integer)
begin
select MAX(recordID)+1 into nextID from PInvLines;
if(nextID is null) then
set nextID=1
end if
end

======================程序
con = cp.getConn();
con.setAutoCommit(true);
CallableStatement proc = con.prepareCall("{ ? = call dba.GetNextPInvLineRecordID() }");
//CallableStatement proc = con.prepareCall("{ call dba.GetNextPInvLineRecordID(?) }"); 这里改成这样试过也不行
proc.registerOutParameter(1, Types.INTEGER);
boolean results = proc.execute();
System.out.println("results: "+results);
int cout = proc.getUpdateCount();
System.out.println("UpdateCount: "+cout);
ResultSet rs = proc.getResultSet();
while (rs!=null && rs.next())
{
System.out.println("1: " + rs.getString(1));
}
if( rs!=null ) rs.close();

打印出来的结果是:
results: false
UpdateCount: 0

直接运行存储过程,是有值返回的,但我用JAVA调用的时候,为什么没有返回值呢?弄了半天没有解决,请大家帮忙看看是什么地方有问题。谢谢了。
kokobox 2008-04-07
  • 打赏
  • 举报
回复
给你看下我以前调用存储过程的代码,当初也遇到很多问题,但是我的数据库是oracle,但是jdbc调用都应该是差不多的

希望能给你一些启发

http://user.qzone.qq.com/67622728

62,623

社区成员

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

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