페이징시 데이터 규격 (paging structure)

doSearchPaging 함수로 데이터 바인딩 시 사용되는 서버 응답 데이터 구조를 정의합니다.

doSearchPaging Method 데이터 규격

//서버 응답 예시: cfg.PageLength 개수만큼 Data 배열 포함
{"Data":
    [
        {"sa_name":"홍길동","sa_no":"940154","sa_dept":"A021"},
        {"sa_name":"김지수","sa_no":"950757","sa_dept":"B022"}
    ],
 "Total":25410      //<-- DB상의 전체 건수
}
// ※ 예제 코드이며, 실제 서비스에서는 DB / SQL / 페이징 방식에 맞게 수정 필요
// 서버 예제
import java.io.IOException;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.json.JSONArray;
import org.json.JSONObject;

public class PagingExampleServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("application/json;charset=UTF-8");

        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        // 요청 페이지
        int page = Integer.parseInt(request.getParameter("ibpage")); 
        // 페이지당 데이터 수, (Cfg) PageLength에 설정한 개수와 동일
        int pageLength = Integer.parseInt(request.getParameter("ibpagelength")); 
        int total = 0; // 전체 건수

        try {
            conn = getConnection(); // DB 연결

            // 1. 최초 조회 시 전체 건수 확인
            if (page == 1) {
                pstmt = conn.prepareStatement("SELECT COUNT(1) AS CNT FROM TABLE_NAME");
                rs = pstmt.executeQuery();
                if (rs.next()) {
                    total = rs.getInt("CNT");
                }
                rs.close();
                pstmt.close();
            }

            // 2. 페이지 계산
            int startRow = (page - 1) * pageLength + 1;
            int endRow = startRow + pageLength - 1;

            // 3. 데이터 조회 (ROWNUM 기반)
            StringBuilder sb = new StringBuilder();
                          sb.append("SELECT * FROM (")
                         .append("  SELECT ROWNUM RN, EMP, EMP_NO, DEPT ")
                         .append("  FROM (SELECT EMP, EMP_NO, DEPT FROM TABLE_NAME ORDER BY EMP_NO)")
                         .append(") WHERE RN BETWEEN ? AND ?");

            String query = sb.toString();

            pstmt = conn.prepareStatement(query);
            pstmt.setInt(1, startRow);
            pstmt.setInt(2, endRow);
            rs = pstmt.executeQuery();

            // 4. JSON 객체 생성
            JSONObject json = new JSONObject();
            JSONArray dataArr = new JSONArray();

            while (rs.next()) {
                JSONObject row = new JSONObject();
                row.put("RN", rs.getInt("RN"));
                row.put("EMP", rs.getString("EMP"));
                row.put("EMP_NO", rs.getString("EMP_NO"));
                row.put("DEPT", rs.getString("DEPT"));
                dataArr.put(row);
            }

            json.put("Data", dataArr);
            json.put("Total", total);

            // 5. JSON 출력
            response.getWriter().print(json.toString());

        } catch (Exception e) {
            e.printStackTrace();
            response.getWriter().print("{\"error\":\""+e.getMessage()+"\"}");
        } finally {
            try { if(rs!=null) rs.close(); } catch(Exception e) {}
            try { if(pstmt!=null) pstmt.close(); } catch(Exception e) {}
            try { if(conn!=null) conn.close(); } catch(Exception e) {}
        }
    }

    private Connection getConnection() throws SQLException {
        // 예시: Oracle DataSource 또는 DriverManager 사용
        // return DriverManager.getConnection(dbUrl, user, password);
        return null;
    }
}

Read More

Since

product version desc
core 8.0.0.0 기능 추가