2015-08-24 6 views
2

У меня есть хранимая процедура в базе данных SQL Server. Эта хранимая процедура возвращает все записи во временную таблицу.Как вызвать хранимую процедуру с Java

Это последняя часть моей хранимой процедуры:

SELECT 
    CONVERT(varchar, [Calcolato_TimespanInizio], 103) as DataAccesso, 
    CAST(DATEPART(HOUR, [Calcolato_TimespanInizio]) AS NVARCHAR(100))+':'+CAST(DATEPART(MINUTE, [Calcolato_TimespanInizio]) AS NVARCHAR(100)) as OraInizio, 
    CAST(DATEPART(HOUR, [Calcolato_TimespanFine]) AS NVARCHAR(100))+':'+CAST(DATEPART(MINUTE, [Calcolato_TimespanFine]) AS NVARCHAR(100)) as OraFine, 
    T.IDNostro as CodiceCategoriaOperatore, 
    1 as numQta, 
    '' as descrizioniNote, 
    DATEPART(weekday,[Calcolato_TimespanInizio]) as flagFestivoPrefestivo, 
    '' as CodiceErogatore, 
    COALESCE(Dichiarati_KmPercorsi, Calcolati_KmPercorsi) as numKmPercorsi, 
    CodiceVoucher as identificativoPianoAssistenziale, 
    ID as identificativoIntervento, 
    '' as incaricoAmbulatoriale, 
    '' as incaricoContinuitaAssistenziale, 
    @ID_PRESTAZIONE AS ElencoPrestazioni 
FROM 
    AA_V_Accessi A 
JOIN 
    AA_V_Operatori O ON A.CodiceOperatore = O.CODICE 
JOIN 
    AA_V_T_EXP_T_TipologieOperatori T ON T.IDNostro = O.IDTipologiaOperatore 
             AND T.ASL = 'br' 

RETURN 1 

Теперь я хочу, чтобы вызвать эту хранимую процедуру из клиента Java.

Это код:

  String query = "{call [dbo].[_WS_ElencoAccessi]}"; 

      CallableStatement stmt = db.prepareCall(query); 
      stmt.registerOutParameter(1, java.sql.Types.VARCHAR); 
      stmt.registerOutParameter(2, java.sql.Types.VARCHAR); 
      stmt.registerOutParameter(3, java.sql.Types.VARCHAR); 
      stmt.registerOutParameter(4, java.sql.Types.INTEGER); 
      stmt.registerOutParameter(5, java.sql.Types.INTEGER); 
      stmt.registerOutParameter(6, java.sql.Types.VARCHAR); 
      stmt.registerOutParameter(7, java.sql.Types.VARCHAR); 
      stmt.registerOutParameter(8, java.sql.Types.VARCHAR); 
      stmt.registerOutParameter(9, java.sql.Types.VARCHAR); 
      stmt.registerOutParameter(10, java.sql.Types.VARCHAR); 
      stmt.registerOutParameter(11, java.sql.Types.VARCHAR); 
      stmt.registerOutParameter(12, java.sql.Types.VARCHAR); 
      stmt.registerOutParameter(13, java.sql.Types.VARCHAR); 
      stmt.registerOutParameter(14, java.sql.Types.VARCHAR); 

      ResultSet rs = stmt.executeQuery(); // Ottengo il ResultSet dell'esecuzione della query 
      while(rs.next()) { 
       Accessi accesso = new Accessi(); 
       accesso.setDataAccesso(rs.getString(1)); 

       lista.add(accesso); 
      } 

Но я получаю SQLServerException

(com.microsoft.sqlserver.jdbc.SQLServerException) com.microsoft.sqlserver.jdbc.SQLServerException: L ' индекс 1 находится за пределами допустимого диапазона.

+1

Где находится exeption? Поделитесь с нами – lad2025

+0

в этой версии нет, но теперь я хочу знать, как я могу назвать эту процедуру магазина – bircastri

+0

Выполняет ли хранимую процедуру правильно, если вы запускаете ее непосредственно на SQL Server? Если нет, то проблема заключается исключительно в самой процедуре, и тот факт, что вы вызываете ее с Java, не имеет значения. Если он работает при вызове на сервере, то это просто проблема языка Java. В любом случае, я думаю, что этот вопрос можно упростить и удалить один или другой тег. –

ответ

0

Добавить скобки после имени хранимой процедуры, с равным количеством вопросительных знаков в соответствии с количеством параметров, которые вы хотите заливаете.

Ев.

{call MyProc(?,?,?)} 
Смежные вопросы