복붙노트

[SQL] 어떻게 테이블 데이터를 반환, 자바 / JSP에서 MS SQL Server 저장 프로 시저를 실행합니까?

SQL

어떻게 테이블 데이터를 반환, 자바 / JSP에서 MS SQL Server 저장 프로 시저를 실행합니까?

나는 자바 / JSP에서 MS SQL Server 저장 프로 시저를 실행하는 데 문제가 있어요. 나는 데이터의 테이블 집합을 반환 할; 저장 프로 시저의 마지막 행은 테이블에서 일반 선택 문입니다.

(이러한 관점에서, 저장 프로 시저를 실행하는 PHP에서 순조롭게이다.)

나는 도움이 사이트를 살펴했다 : www.2netave.com www.stackoverflow.com

내가 대신 ()의 createStatement를 사용하고 있었던 나는이 함수는 단지 저장 프로 시저있다 몰랐어요.

이제 SQL Server 관리 Studio에서 완벽하게 저장 프로 시저가 실행을 이해하고 내가 실행에는 문제가 없었다 제발 임시 쿼리에서 JSP /의 createStatement와 자바 ().

난 그냥 문제를 좁힐, 인수를 취하지 않는 간단한 저장 프로 시저를 만들었습니다 :

CREATE PROCEDURE sp_test AS
BEGIN
PRINT 'HELLO WORLD'
END

여기 내 JSP 페이지의 코드는 다음과 같습니다

Class.forName("net.sourceforge.jtds.jdbc.Driver");
java.sql.Connection conn = java.sql.DriverManager.getConnection("jdbc:jtds:sqlserver://MySQLServer:1433/test", "user", "pass");
java.sql.CallableStatement cs = conn.prepareCall("{call sp_test}"); 
java.sql.ResultSet ResultSet = cs.execute();

브라우저는 내부 서버 오류가 발생하여 페이지를 표시 할 수 없습니다 내게 말하고있다. 나는 위의 코드에 문제가이 수단이 알고있다.

나는이 시도 :

java.sql.ResultSet ResultSet = cs.executeQuery();

이:

java.sql.CallableStatement cs = conn.prepareCall("{execute sp_test}");

이:

java.sql.CallableStatement cs = conn.prepareCall("{exec sp_test}");

그리고 아무 일 없습니다. 나는이 작업을 얻을 수있게되면, 그때는 실제 저장 프로 시저를 실행할 수 SELECT 문에서 반환 테이블 데이터. 하지만 난 일이 더미 저장 프로 시저를 얻을 수 없습니다.

어떻게 내가 여기 잘못 한거야?

감사합니다.

최신 정보:

서버 로그 (IIS) 내 HTTP 프록시, 피들러를 검사하고, 아무것도보고하지 않습니다. 그러나, IIS는 JSP 페이지의 서블릿 엔진으로 Tomcat을 사용하고 있습니다. 그리고 로그 파일 바람둥이 다음을보고 :

An error occurred at line: 20 in the jsp file: /test.jsp
Type mismatch: cannot convert from boolean to ResultSet
17: 
18:     java.sql.CallableStatement cs = conn.prepareCall("{call sp_test}");
19:     
20:     java.sql.ResultSet ResultSet = cs.execute();
21: 
22: //  java.sql.ResultSet ResultSet = state.executeQuery(SQL); 
23: 

나는 위의 변경 시도 :

cs.execute();

그리고 로그 파일을보고 :

- Servlet.service() for servlet jsp threw exception
java.sql.SQLException: The EXECUTE permission was denied on the object 'sp_test', database 'test', schema 'dbo'.

그래서, 나는 사용자 실행을 부여해야 알아 낸. 또 다른 문제는 저장 프로 시저에서 테이블 데이터를 반환합니다.

나는이 같은 절차가있는 경우 :

CREATE PROCEDURE sp_test2 AS
BEGIN
SELECT * FROM TABLE
END

어떻게 JSP의 테이블 데이터를 조작 하는가? 겠습니까 ResultSet의 작업 또는 단지 임시 쿼리, 저장 프로 시저에 반대를 들어, 하나의 createStatement ()는 쿼리를 실행하는 데 사용하는 곳입니까?

감사합니다.

갱신 2 :

해결책:

테이블 데이터를 조작하기 위해, 나는 이것을 사용했다 :

java.sql.ResultSet RS = cs.executeQuery();

그것은에 실행 실패 ()과는 ResultSet 객체 "결과 집합"이름에 실패했습니다. 그것은의 createStatement와 과거에 이것에 대해 불평하지 않았 (). 그러나 저장 프로 시저 몇 가지 이유에 대해,이 이름 지정 규칙을 좋아하지 않았다.

감사합니다.

해결법

  1. ==============================

    1.: SQL 서버 2000 및 2008 모두에서 작동 -과 같이 우리의 서버 호출은 자바에서 발동 저장

    : SQL 서버 2000 및 2008 모두에서 작동 -과 같이 우리의 서버 호출은 자바에서 발동 저장

    String SPsql = "EXEC <sp_name> ?,?";   // for stored proc taking 2 parameters
    Connection con = SmartPoolFactory.getConnection();   // java.sql.Connection
    PreparedStatement ps = con.prepareStatement(SPsql);
    ps.setEscapeProcessing(true);
    ps.setQueryTimeout(<timeout value>);
    ps.setString(1, <param1>);
    ps.setString(2, <param2>);
    ResultSet rs = ps.executeQuery();
    
  2. ==============================

    2.코드에 대한 브라이언에 감사드립니다. 나는 {전화 spname (?,?)}와 SQL 서버에 연결을 시도하고 있었고, 난 오류를 가지고,하지만 난 간부 인 SP에 코드를 변경하면 ... 그것은 매우 잘 작동합니다.

    코드에 대한 브라이언에 감사드립니다. 나는 {전화 spname (?,?)}와 SQL 서버에 연결을 시도하고 있었고, 난 오류를 가지고,하지만 난 간부 인 SP에 코드를 변경하면 ... 그것은 매우 잘 작동합니다.

    나는 희망 내 코드이 내 같은 문제로 다른 사람을 도움이 게시 :

    ResultSet rs = null;
    PreparedStatement cs=null;
    Connection conn=getJNDIConnection();
    
    try {
        cs=conn.prepareStatement("exec sp_name ?,?,?,?,?,?,?");
        cs.setEscapeProcessing(true);
        cs.setQueryTimeout(90);
    
        cs.setString(1, "valueA");
    
        cs.setString(2, "valueB");
    
        cs.setString(3, "0418");
    
        //commented, because no need to register parameters out!, I got results from the resultset. 
        //cs.registerOutParameter(1, Types.VARCHAR);
        //cs.registerOutParameter(2, Types.VARCHAR);
    
        rs = cs.executeQuery();
        ArrayList<ObjectX> listaObjectX = new ArrayList<ObjectX>();
        while (rs.next()) {
    
            ObjectX to = new ObjectX();
            to.setFecha(rs.getString(1));
            to.setRefId(rs.getString(2));
            to.setRefNombre(rs.getString(3));
            to.setUrl(rs.getString(4));
    
            listaObjectX.add(to);
    
        }
        return listaObjectX;
         } catch (SQLException se) {
            System.out.println("Error al ejecutar SQL"+ se.getMessage());
            se.printStackTrace();
            throw new IllegalArgumentException("Error al ejecutar SQL: " + se.getMessage());
    
        } finally {
    
            try {
    
                rs.close();
                cs.close();
              con.close();
    
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
    
  3. ==============================

    3.자주 우리는 이러한 저장 프로 시저를 만드는 다른 동료 자바 프로그래머의 작업을 처리합니다. 우리는 그것으로 주위를 엉망으로하지 않습니다. 하지만 당신은이 간부 샘플 리턴이 0 (거의 저장 프로 시저 호출이 제로를 반환) 결과 집합을받을 가능성이 있습니다.

    자주 우리는 이러한 저장 프로 시저를 만드는 다른 동료 자바 프로그래머의 작업을 처리합니다. 우리는 그것으로 주위를 엉망으로하지 않습니다. 하지만 당신은이 간부 샘플 리턴이 0 (거의 저장 프로 시저 호출이 제로를 반환) 결과 집합을받을 가능성이 있습니다.

    이 샘플을 확인 :

    public void generateINOUT(String USER, int DPTID){
    
        try {
    
    
            conUrl = JdbcUrls + dbServers +";databaseName="+ dbSrcNames+";instance=MSSQLSERVER";
    
            con = DriverManager.getConnection(conUrl,dbUserNames,dbPasswords);
            //stat = con.createStatement();
            con.setAutoCommit(false); 
            Statement st = con.createStatement(); 
    
            st.executeUpdate("DECLARE @RC int\n" +
                    "DECLARE @pUserID nvarchar(50)\n" +
                    "DECLARE @pDepartmentID int\n" +
                    "DECLARE @pStartDateTime datetime\n" +
                    "DECLARE @pEndDateTime datetime\n" +
                    "EXECUTE [AccessManager].[dbo].[SP_GenerateInOutDetailReportSimple] \n" +
                    ""+USER +
                    "," +DPTID+
                    ",'"+STARTDATE +
                    "','"+ENDDATE+"'");
    
            ResultSet rs = st.getGeneratedKeys();
    
            while (rs.next()){
                  String userID = rs.getString("UserID");
                  Timestamp timeIN = rs.getTimestamp("timeIN");
                  Timestamp timeOUT = rs.getTimestamp ("timeOUT");
                  int totTime = rs.getInt ("totalTime");
                  int pivot = rs.getInt ("pivotvalue");
    
                  timeINS = sdz.format(timeIN);
                  userIN.add(timeINS);
    
                  timeOUTS = sdz.format(timeOUT);
                  userOUT.add(timeOUTS);
    
                  System.out.println("User : "+userID+" |IN : "+timeIN+" |OUT : "+timeOUT+"| Total Time : "+totTime+" | PivotValue : "+pivot);
            }
    
            con.commit();
    
        }catch (Exception e) {
            e.printStackTrace();
            System.out.println(e);
            if (e.getCause() != null) {
            e.getCause().printStackTrace();}
        }  
    }
    

    나는 며칠 시행 착오 후이 솔루션에 와서 인터넷 검색과 혼동 얻을;) 이 저장 프로 시저 아래 실행 :

    USE [AccessManager]
    GO
    /****** Object:  StoredProcedure [dbo].[SP_GenerateInOutDetailReportSimple]    
    Script Date: 04/05/2013 15:54:11 ******/
    SET ANSI_NULLS OFF
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    
    ALTER PROCEDURE [dbo].[SP_GenerateInOutDetailReportSimple]
    (
    @pUserID nvarchar(50),
    @pDepartmentID int,
    @pStartDateTime datetime,
    @pEndDateTime datetime
    )
    AS
    
    
    Declare @ErrorCode int
    Select @ErrorCode = @@Error
    
    Declare @TransactionCountOnEntry int
    If @ErrorCode = 0
    Begin
        Select @TransactionCountOnEntry = @@TranCount
        BEGIN TRANSACTION
    End
    
    
    If @ErrorCode = 0
    Begin       
    
        -- Create table variable instead of SQL temp table because report wont pick up the temp table
        DECLARE @tempInOutDetailReport TABLE
        (
            UserID nvarchar(50),
            LogDate datetime,   
            LogDay varchar(20), 
            TimeIN datetime,
            TimeOUT datetime,
            TotalTime int,
            RemarkTimeIn nvarchar(100),
            RemarkTimeOut nvarchar(100),
            TerminalIPTimeIn varchar(50),
            TerminalIPTimeOut varchar(50),
            TerminalSNTimeIn nvarchar(50),
            TerminalSNTimeOut nvarchar(50),
            PivotValue int
        )           
    
        -- Declare variables for the while loop
        Declare @LogUserID nvarchar(50)
        Declare @LogEventID nvarchar(50)
        Declare @LogTerminalSN nvarchar(50)
        Declare @LogTerminalIP nvarchar(50)
        Declare @LogRemark nvarchar(50)
        Declare @LogTimestamp datetime  
        Declare @LogDay nvarchar(20)
    
        -- Filter off userID, departmentID, StartDate and EndDate if specified, only process the remaining logs
        -- Note: order by user then timestamp
        Declare LogCursor Cursor For 
        Select distinct access_event_logs.USERID, access_event_logs.EVENTID, 
            access_event_logs.TERMINALSN, access_event_logs.TERMINALIP,
            access_event_logs.REMARKS, access_event_logs.LOCALTIMESTAMP, Datename(dw,access_event_logs.LOCALTIMESTAMP) AS WkDay
        From access_event_logs
            Left Join access_user on access_user.User_ID = access_event_logs.USERID
            Left Join access_user_dept on access_user.User_ID = access_user_dept.User_ID
        Where ((Dept_ID = @pDepartmentID) OR (@pDepartmentID IS NULL))
            And ((access_event_logs.USERID LIKE '%' + @pUserID + '%') OR (@pUserID IS NULL)) 
            And ((access_event_logs.LOCALTIMESTAMP >= @pStartDateTime ) OR (@pStartDateTime IS NULL)) 
            And ((access_event_logs.LOCALTIMESTAMP < DATEADD(day, 1, @pEndDateTime) ) OR (@pEndDateTime IS NULL)) 
            And (access_event_logs.USERID != 'UNKNOWN USER') -- Ignore UNKNOWN USER
        Order by access_event_logs.USERID, access_event_logs.LOCALTIMESTAMP
    
        Open LogCursor
    
        Fetch Next 
        From LogCursor
        Into @LogUserID, @LogEventID, @LogTerminalSN, @LogTerminalIP, @LogRemark, @LogTimestamp, @LogDay
    
        -- Temp storage for IN event details
        Declare @InEventUserID nvarchar(50)
        Declare @InEventDay nvarchar(20)
        Declare @InEventTimestamp datetime
        Declare @InEventRemark nvarchar(100)
        Declare @InEventTerminalIP nvarchar(50)
        Declare @InEventTerminalSN nvarchar(50)
    
        -- Temp storage for OUT event details
        Declare @OutEventUserID nvarchar(50)        
        Declare @OutEventTimestamp datetime
        Declare @OutEventRemark nvarchar(100)
        Declare @OutEventTerminalIP nvarchar(50)
        Declare @OutEventTerminalSN nvarchar(50)
    
        Declare @CurrentUser varchar(50) -- used to indicate when we change user group
        Declare @CurrentDay varchar(50) -- used to indicate when we change day
        Declare @FirstEvent int -- indicate the first event we received     
        Declare @ReceiveInEvent int -- indicate we have received an IN event
        Declare @PivotValue int -- everytime we change user or day - we reset it (reporting purpose), if same user..keep increment its value
        Declare @CurrTrigger varchar(50) -- used to keep track of the event of the current event log trigger it is handling 
        Declare @CurrTotalHours int -- used to keep track of total hours of the day of the user
    
        Declare @FirstInEvent datetime
        Declare @FirstInRemark nvarchar(100)
        Declare @FirstInTerminalIP nvarchar(50)
        Declare @FirstInTerminalSN nvarchar(50)
        Declare @FirstRecord int -- indicate another day of same user
    
        Set @PivotValue = 0 -- initialised
        Set @CurrentUser = '' -- initialised
        Set @FirstEvent = 1 -- initialised
        Set @ReceiveInEvent = 0 -- initialised  
        Set @CurrTrigger = '' -- Initialised    
        Set @CurrTotalHours = 0 -- initialised
        Set @FirstRecord = 1 -- initialised
        Set @CurrentDay = '' -- initialised
    
        While @@FETCH_STATUS = 0
        Begin
            -- use to track current log trigger
            Set @CurrTrigger =LOWER(@LogEventID)
    
            If (@CurrentUser != '' And @CurrentUser != @LogUserID) -- new batch of user
            Begin
                If @ReceiveInEvent = 1  -- previous IN event is not cleared (no OUT is found)
                Begin
                    -- Check day
                    If (@CurrentDay != @InEventDay) -- change to another day                    
                        Set @PivotValue = 0 -- Reset                        
    
                    Else -- same day
                        Set @PivotValue = @PivotValue + 1 -- increment
                    Set @CurrentDay = @InEventDay -- update the day
    
                    -- invalid row (only has IN event)
                    Insert into @tempInOutDetailReport( UserID, LogDay, TimeIN, RemarkTimeIn, TerminalIPTimeIn, 
                        TerminalSNTimeIn, PivotValue, LogDate )
                    values( @InEventUserID, @InEventDay, @InEventTimestamp, @InEventRemark, @InEventTerminalIP, 
                        @InEventTerminalSN, @PivotValue, DATEADD(HOUR, 0, DATEDIFF(DAY, 0, @InEventTimestamp)))                                                         
                End                 
    
                Set @FirstEvent = 1 -- Reset flag (we are having a new user group)
                Set @ReceiveInEvent = 0 -- Reset
                Set @PivotValue = 0 -- Reset
                --Set @CurrentDay = '' -- Reset
            End
    
            If LOWER(@LogEventID) = 'in' -- IN event
            Begin           
                If @ReceiveInEvent = 1  -- previous IN event is not cleared (no OUT is found)
                Begin
                    -- Check day
                    If (@CurrentDay != @InEventDay) -- change to another day
                    Begin
                        Set @PivotValue = 0 -- Reset
    
                        --Insert into @tempInOutDetailReport( UserID, LogDay, TimeIN, TimeOUT, TotalTime, RemarkTimeIn,
                        --  RemarkTimeOut, TerminalIPTimeIn, TerminalIPTimeOut, TerminalSNTimeIn, TerminalSNTimeOut, PivotValue,
                        --  LogDate)
                        --values( @LogUserID, @CurrentDay, @FirstInEvent, @LogTimestamp,  @CurrTotalHours,
                        --  @FirstInRemark, @LogRemark, @FirstInTerminalIP, @LogTerminalIP, @FirstInTerminalSN, @LogTerminalSN, @PivotValue,
                        --  DATEADD(HOUR, 0, DATEDIFF(DAY, 0, @InEventTimestamp)))  
                    End
                    Else
                        Set @PivotValue = @PivotValue + 1 -- increment
                    Set @CurrentDay = @InEventDay -- update the day
    
    
                    -- invalid row (only has IN event)
                    Insert into @tempInOutDetailReport( UserID, LogDay, TimeIN, RemarkTimeIn, TerminalIPTimeIn, 
                        TerminalSNTimeIn, PivotValue, LogDate )
                    values( @InEventUserID, @InEventDay, @InEventTimestamp, @InEventRemark, @InEventTerminalIP, 
                        @InEventTerminalSN, @PivotValue, DATEADD(HOUR, 0, DATEDIFF(DAY, 0, @InEventTimestamp)))                     
                End         
    
                If((@CurrentDay != @LogDay And @CurrentDay != '') Or (@CurrentUser != @LogUserID And @CurrentUser != '') )
                Begin
    
                        Insert into @tempInOutDetailReport( UserID, LogDay, TimeIN, TimeOUT, TotalTime, RemarkTimeIn,
                            RemarkTimeOut, TerminalIPTimeIn, TerminalIPTimeOut, TerminalSNTimeIn, TerminalSNTimeOut, PivotValue,
                            LogDate)
                        values( @CurrentUser, @CurrentDay, @FirstInEvent, @OutEventTimestamp, @CurrTotalHours,
                            @FirstInRemark, @OutEventRemark, @FirstInTerminalIP, @OutEventTerminalIP, @FirstInTerminalSN, @LogTerminalSN, @PivotValue,
                            DATEADD(HOUR, 0, DATEDIFF(DAY, 0, @InEventTimestamp)))      
    
                    Set @FirstRecord = 1
                End
                -- Save it
                Set @InEventUserID = @LogUserID                         
                Set @InEventDay = @LogDay
                Set @InEventTimestamp = @LogTimeStamp
                Set @InEventRemark = @LogRemark
                Set @InEventTerminalIP = @LogTerminalIP
                Set @InEventTerminalSN = @LogTerminalSN
    
                If (@FirstRecord = 1) -- save for first in event record of the day
                Begin
                    Set @FirstInEvent = @LogTimestamp
                    Set @FirstInRemark = @LogRemark
                    Set @FirstInTerminalIP = @LogTerminalIP
                    Set @FirstInTerminalSN = @LogTerminalSN
                    Set @CurrTotalHours = 0 --initialise total hours for another day
                End
    
                Set @FirstRecord = 0 -- no more first record of the day
                Set @ReceiveInEvent = 1 -- indicate we have received an "IN" event
                Set @FirstEvent = 0  -- no more "first" event
            End
            Else If LOWER(@LogEventID) = 'out' -- OUT event
            Begin
                If @FirstEvent = 1 -- the first OUT record when change users 
                Begin
                    -- Check day
                    If (@CurrentDay != @LogDay) -- change to another day
                        Set @PivotValue = 0 -- Reset
                    Else
                        Set @PivotValue = @PivotValue + 1 -- increment
                    Set @CurrentDay = @LogDay -- update the day
    
                    -- Only an OUT event (no IN event) - invalid record but we show it anyway
                    Insert into @tempInOutDetailReport( UserID, LogDay, TimeOUT, RemarkTimeOut, TerminalIPTimeOut, TerminalSNTimeOut,
                        PivotValue, LogDate )
                    values( @LogUserID, @LogDay, @LogTimestamp, @LogRemark, @LogTerminalIP, @LogTerminalSN, @PivotValue,
                        DATEADD(HOUR, 0, DATEDIFF(DAY, 0, @LogTimestamp)))                                              
    
                    Set @FirstEvent = 0 -- not "first" anymore
                End
                Else -- Not first event
                Begin       
    
                    If @ReceiveInEvent = 1 -- if there are IN event previously
                    Begin           
                        -- Check day
                        If (@CurrentDay != @InEventDay) -- change to another day                        
                            Set @PivotValue = 0 -- Reset                        
                        Else
                            Set @PivotValue = @PivotValue + 1 -- increment
                        Set @CurrentDay = @InEventDay -- update the day     
                        Set @CurrTotalHours = @CurrTotalHours +  DATEDIFF(second,@InEventTimestamp, @LogTimeStamp) -- update total time             
    
                        Set @OutEventRemark = @LogRemark
                        Set @OutEventTerminalIP = @LogTerminalIP
                        Set @OutEventTerminalSN = @LogTerminalSN
                        Set @OutEventTimestamp = @LogTimestamp          
                        -- valid row
                        --Insert into @tempInOutDetailReport( UserID, LogDay, TimeIN, TimeOUT, TotalTime, RemarkTimeIn,
                        --  RemarkTimeOut, TerminalIPTimeIn, TerminalIPTimeOut, TerminalSNTimeIn, TerminalSNTimeOut, PivotValue,
                        --  LogDate)
                        --values( @LogUserID, @InEventDay, @InEventTimestamp, @LogTimestamp,  Datediff(second, @InEventTimestamp, @LogTimeStamp),
                        --  @InEventRemark, @LogRemark, @InEventTerminalIP, @LogTerminalIP, @InEventTerminalSN, @LogTerminalSN, @PivotValue,
                        --  DATEADD(HOUR, 0, DATEDIFF(DAY, 0, @InEventTimestamp)))                      
    
                        Set @ReceiveInEvent = 0 -- Reset
                    End
                    Else -- no IN event previously
                    Begin
                        -- Check day
                        If (@CurrentDay != @LogDay) -- change to another day
                            Set @PivotValue = 0 -- Reset
                        Else
                            Set @PivotValue = @PivotValue + 1 -- increment
                        Set @CurrentDay = @LogDay -- update the day                         
    
                        -- invalid row (only has OUT event)
                        Insert into @tempInOutDetailReport( UserID, LogDay, TimeOUT, RemarkTimeOut, TerminalIPTimeOut, TerminalSNTimeOut,
                            PivotValue, LogDate )
                        values( @LogUserID, @LogDay, @LogTimestamp, @LogRemark, @LogTerminalIP, @LogTerminalSN, @PivotValue,
                            DATEADD(HOUR, 0, DATEDIFF(DAY, 0, @LogTimestamp)) )             
                    End             
                End         
            End
    
            Set @CurrentUser = @LogUserID -- update user        
    
            Fetch Next 
            From LogCursor
            Into @LogUserID, @LogEventID, @LogTerminalSN, @LogTerminalIP, @LogRemark, @LogTimestamp, @LogDay
        End 
    
        -- Need to handle the last log if its IN log as it will not be processed by the while loop
        if @CurrTrigger='in'
        Begin 
        -- Check day
                If (@CurrentDay != @InEventDay) -- change to another day
                    Set @PivotValue = 0 -- Reset
                Else -- same day
                    Set @PivotValue = @PivotValue + 1 -- increment
                Set @CurrentDay = @InEventDay -- update the day
    
                -- invalid row (only has IN event)
                Insert into @tempInOutDetailReport( UserID, LogDay, TimeIN, RemarkTimeIn, TerminalIPTimeIn, 
                    TerminalSNTimeIn, PivotValue, LogDate )
                values( @InEventUserID, @InEventDay, @InEventTimestamp, @InEventRemark, @InEventTerminalIP, 
                        @InEventTerminalSN, @PivotValue, DATEADD(HOUR, 0, DATEDIFF(DAY, 0, @InEventTimestamp)))     
        End
        else if @CurrTrigger = 'out'
        Begin
            Insert into @tempInOutDetailReport( UserID, LogDay, TimeIN, TimeOUT, TotalTime, RemarkTimeIn,
            RemarkTimeOut, TerminalIPTimeIn, TerminalIPTimeOut, TerminalSNTimeIn, TerminalSNTimeOut, PivotValue,
            LogDate)
            values( @LogUserID, @CurrentDay, @FirstInEvent, @LogTimestamp,  @CurrTotalHours,
            @FirstInRemark, @LogRemark, @FirstInTerminalIP, @LogTerminalIP, @FirstInTerminalSN, @LogTerminalSN, @PivotValue,
            DATEADD(HOUR, 0, DATEDIFF(DAY, 0, @InEventTimestamp)))  
        End
    
        Close LogCursor
        Deallocate LogCursor
    
        Select * 
        From @tempInOutDetailReport tempTable
            Left Join access_user on access_user.User_ID = tempTable.UserID
        Order By tempTable.UserID, LogDate
    
    
    End
    
    
    
    If @@TranCount > @TransactionCountOnEntry
    Begin
         If @ErrorCode = 0
                COMMIT TRANSACTION
         Else
                ROLLBACK TRANSACTION
    End
    
    return @ErrorCode
    

    당신은 당신의 데이터베이스에 저장 프로 시저에 마우스 오른쪽 버튼을 클릭하여 "자바 SQL 코드"를 얻을 것이다. 이 같은 :

    DECLARE @RC int
    DECLARE @pUserID nvarchar(50)
    DECLARE @pDepartmentID int
    DECLARE @pStartDateTime datetime
    DECLARE @pEndDateTime datetime
    
    -- TODO: Set parameter values here.
    
    EXECUTE @RC = [AccessManager].[dbo].[SP_GenerateInOutDetailReportSimple] 
    @pUserID,@pDepartmentID,@pStartDateTime,@pEndDateTime
    GO
    

    문자열 내가했던 쿼리를 확인, 그 숙제입니다;) 미안 긴이 응답, 내가 대답을 얻기 위해 몇 주 전에 등록 이후이 내 첫 번째 대답이다.

  4. ==============================

    4.FWIW는 sp_test 아무것도하지만, 정수 (모든 SQL Server 저장 발동 그냥 정수를 반환) 및 (NO SELECT 문부터) 전선에 아무런 결과 집합을 반환하지 않습니다. 인쇄 문의 출력을 얻으려면, 당신은 일반적으로 ADO.NET에서 연결 (안 명령)에 InfoMessage 이벤트를 사용합니다.

    FWIW는 sp_test 아무것도하지만, 정수 (모든 SQL Server 저장 발동 그냥 정수를 반환) 및 (NO SELECT 문부터) 전선에 아무런 결과 집합을 반환하지 않습니다. 인쇄 문의 출력을 얻으려면, 당신은 일반적으로 ADO.NET에서 연결 (안 명령)에 InfoMessage 이벤트를 사용합니다.

  5. from https://stackoverflow.com/questions/6113674/how-do-i-execute-a-ms-sql-server-stored-procedure-in-java-jsp-returning-table-d by cc-by-sa and MIT license