我正在使用JTDS和Java连接到Microsoft SQL数据库。我能够完美地连接到数据库。但是,当我运行下面的代码时,我收到一个错误“无法找到存储过程'get_queue_items'”。我试过加上'dbo'的前缀。到存储过程名称,但我继续得到错误。我还包括了实际的存储过程以供参考。
try {
// Prepare and call the stored procedure
CallableStatement proc = connection.prepareCall("{call get_queue_items(?) }");
// Register the ResultSet
proc.registerOutParameter(1, java.sql.Types.INTEGER);
// Register Input Parameters
proc.setInt("@last_queue_entry", 1);
// Execute the stored procedure
proc.execute();
// If we have a ResultSet
if (proc.getMoreResults()) {
ResultSet rs = proc.getResultSet();
if (rs.next()) {
// to complete...
}
}
}
catch(Exception ex)
{
System.out.println("Error: " + ex.getMessage());
}
存储过程:
USE [test]
GO
/****** Object: StoredProcedure [dbo].[get_queue_items] Script Date: 11/17/2011 11:43:54 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[get_queue_items] @qid int OUT, @last_queue_entry int as
-- select all the new records out of the main table into a temp table
-- the temp table is what we will use to process
select @qid = qid from test.[dbo].que_items
where qid > @last_queue_entry
我是JTDS和Java的新手,所以我可能有错,但任何帮助都会受到赞赏。
编辑:根据Cristian的建议改变存储过程,仍然得到相同的错误'找不到存储过程'get_queue_items'
编辑2:仍然无法正常工作 - 数据库连接似乎也很好。
答案 0 :(得分:2)
今天我遇到了同样的问题,在我看来,jTDS实施中存在一个错误。对我来说,解决方案是程序重命名并删除所有下划线符号(在您的情况下为getQueueItems(?)
)。试试,我认为这对你有帮助。
答案 1 :(得分:0)
您必须指定输出参数,有些参数不能指定为:text,ntext和image。
ALTER procedure [dbo].[get_queue_items] @id int OUT, @last_queue_entry int as
-- select all the new records out of the main table into a temp table
-- the temp table is what we will use to process
select @id = id from test.[dbo].que_items
where qid > @last_queue_entry
此prodecure将仅返回ID号