簡體   English   中英

如何從Java調用存儲過程

[英]How to call stored procedure from Java

我在SQL Server數據庫中有一個存儲過程。 此存儲過程將所有記錄返回到臨時表中。

這是存儲過程的最后一部分:

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超出允許的范圍。

在存儲過程名稱之后添加一個括號,並帶有相等數量的問號以匹配您希望填寫的參數數量。

例如。

{call MyProc(?,?,?)}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM