JTDS (Java / MSSQL) - не удалось найти хранимую процедуру - PullRequest
0 голосов
/ 17 ноября 2011

Я использую 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, так что, скорее всего, я виноват, но любая помощь будет признательна.

Редактировать: изменил хранимую процедуру согласно совету Кристиана, все еще получая ту же ошибку "Не удалось найти хранимую процедуру" get_queue_items "

Редактировать 2: Все еще не работает - связь с базой данных также выглядит нормально.

Ответы [ 2 ]

2 голосов
/ 21 ноября 2011

Сегодня я столкнулся с той же проблемой, и мне кажется, что в реализации jTDS есть ошибка.Для меня решением было переименование и удаление всех символов подчеркивания (то есть getQueueItems(?) в вашем случае).Попробуйте, я думаю, это должно вам помочь.

0 голосов
/ 17 ноября 2011

Вы должны указать выходные параметры, есть определенные параметры, которые нельзя указать как: 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

эта процедура возвращает только идентификаторы

...