java调用存储过程问题,还是不太明白!

jancyer 2004-09-10 09:55:02
在sql server2000 的country数据库中有一表room(roomid,roomtype,roomstate)
我用java语言查询如下:
..............
private void getResult()
{
Statement statement;
ResultSet resultSet;

try {
String query = "SELECT * FROM roomtype";

statement = connection.createStatement();
resultSet = statement.executeQuery( query );
displayResultSet( resultSet );
statement.close();
}
catch ( SQLException sqlex ) {
sqlex.printStackTrace();
}
}
...........


可以查询出正确结果,但我要调用的是存储过程toesUp,
toesUp的功能也是SELECT * FROM roomtype,代码如下:
...........

private void getResult()
{
CallableStatement toesUp;
try {

// Setup the call.

toesUp = connection.prepareCall("{ call query1 () }");

toesUp.execute();

ResultSet rs = (ResultSet) toesUp.getObject(1);

displayResultSet( rs );

}
catch ( SQLException sqlex ) {
sqlex.printStackTrace();
}
}
...........


编译,运行都通过,但结果是空白,是什么回事啊?
...全文
185 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jancyer 2004-09-13
  • 打赏
  • 举报
回复
解决了,我直接用“exec query1”替换
String query = "SELECT * FROM roomtype"里的SELECT * FROM roomtype就可以了

谢谢大家的帮助!
jancyer 2004-09-13
  • 打赏
  • 举报
回复
按照 Tasia(这里是CSDN吗?)的说法,我的存储过程如下:
CREATE PROCEDURE query5 @myc CURSOR VARYING OUTPUT
AS
SET @myc = CURSOR
FORWARD_ONLY STATIC FOR
select roomId,roomTypeId, roomstate from room where roomState='VC' order by roomId

OPEN @myc


GO


调用如下:statement = connection.createStatement();
toesUp = connection.prepareCall("{ call query5 (?) }");


ResultSet rs = toesUp.executeQuery();
displayResultSet( rs );

可是提示说字段不正确或语法错误,是什么原因啊?
我想是因为没有registerOutParameter(),但我不知道怎么用这个方法?

哪位能说得详细点吗?

谢谢!

playyuer 2004-09-12
  • 打赏
  • 举报
回复
ResultSet rs = toesUp.executeQuery();
playyuer 2004-09-12
  • 打赏
  • 举报
回复
toesUp.executeQuery();
redlaputa 2004-09-12
  • 打赏
  • 举报
回复
对阿,这个存储过程没有输出啊
然后注册callableStatement.registerOutParameter()
Tasia 2004-09-12
  • 打赏
  • 举报
回复
看楼主的存储过程名,就知道这个存储过程根本没有把查询结果传出来啊。这样在外面怎么得到结果呢?
存储过程应该定义一个游标类型的out参数。
sjtsh 2004-09-12
  • 打赏
  • 举报
回复
建议按照skyboy0720(神仙?妖怪?谢谢!)的做法
已经比较详细了
skyboy0720 2004-09-10
  • 打赏
  • 举报
回复
还有记得及时关闭rs.toesUp等对象!
skyboy0720 2004-09-10
  • 打赏
  • 举报
回复
toesUp = connection.prepareCall("{ call query1 () }");

toesUp.execute();

ResultSet rs = (ResultSet) toesUp.getObject(1);

displayResultSet( rs );

改成这样试试:
toesUp = connection.prepareCall("{ call query1 () }");
ResultSet rs = toesUp.executeQuery();
displayResultSet( rs );

skyboy0720 2004-09-10
  • 打赏
  • 举报
回复
你给的代码太少,比如你怎么显示记录的,还有你的存储过程怎么写的!!

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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