JTDS (Java/MSSQL) - 找不到存储过程
Posted
技术标签:
【中文标题】JTDS (Java/MSSQL) - 找不到存储过程【英文标题】:JTDS (Java/MSSQL) - Could not find Stored Procedure 【发布时间】:2011-11-17 15:24:41 【问题描述】:我正在使用 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:仍然无法正常工作 - 数据库连接似乎也很好。
【问题讨论】:
【参考方案1】:今天我遇到了同样的问题,在我看来 jTDS 实现中存在错误。对我来说,解决方案是重命名并删除所有下划线符号(在您的情况下为getQueueItems(?)
)。试试吧,我想它一定对你有帮助。
【讨论】:
这是修复吗?我遇到了同样的错误,但删除下划线并没有解决问题。【参考方案2】:必须指定输出参数,有些参数不能指定为: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
此程序将仅返回 ID 号
【讨论】:
我完全按照上面的方法修改了程序,但仍然出现同样的错误。 connection 已连接到数据库 [Test] ? 如果我将行修改为此 CallableStatement proc = connection.prepareCall("call [test].[dbo].[get_queue_items](1) ");并删除参数会给出错误错误:过程或函数“get_queue_items”需要参数“@last_queue_entry”,但未提供。 所以它知道存储过程,它只是抱怨我如何将变量传递给... 探测 proc.setInt("@last_queue_entry", 1); 没有 @以上是关于JTDS (Java/MSSQL) - 找不到存储过程的主要内容,如果未能解决你的问题,请参考以下文章