簡體   English   中英

如何在我的 JSP 中對可調用語句/准備過程的 output 進行分頁?

[英]How do I paginate the output of a callable statment/prepared procedure in my JSP?

我在其中一個包中有這個過程:

PROCEDURE get_namelist
  (
    return_code_out OUT VARCHAR2,
    return_msg_out OUT VARCHAR2,
    id_no_in IN employee.id_no%TYPE,
    name_out OUT employee.name%TYPE,
        addr_out OUT employee.addr%TYPE
  )
  IS

  BEGIN

    return_code_out := '0000';
    return_msg_out := 'OK';

    SELECT i.name, i.addr INTO name_out, addr_out
      FROM employee i
     WHERE i.id_no = id_no_in;

END get_namelist;

我在我的 Java 中這樣調用這個過程:

DbUtil db = null;
java.sql.CallableStatement cstmt = null;


db = new DbUtil();
cstmt = db.prepareCall("{ call jack.PACK_EMPLOYEE.get_namelist(?, ?, ?, ?, ?) }");

cstmt.registerOutParameter(1,OracleTypes.VARCHAR);
cstmt.registerOutParameter(2,OracleTypes.VARCHAR);
cstmt.setString(3,this.getIdNo());
cstmt.registerOutParameter(4,OracleTypes.VARCHAR);
cstmt.registerOutParameter(5,OracleTypes.VARCHAR);
stmt.execute();

this.setName(cstmt.getString(4));
this.setAddress(cstmt.getString(5));

目前它正在從表中提取所有數據。 我想改變它,所以它會將一定數量的行拉到多個頁面中。 I looked all over and found out how to do JSP pagination when I am using the SQL query in Java code itself, but I coudn't find any example that shows this using package and callable statement.

如何修改此代碼以便可以使用 JSP 分頁?

將頁面大小和頁碼添加到您的程序中。

在查詢中添加行編號,然后返回行號 > ((page size - 1) * page number + 1) 和 row number <= (page size * page number) 的記錄

如果您需要更底層的答案,我可以將其翻譯成相關代碼。


免責聲明:我的 Oracle 語法可能很糟糕。 請參閱Oracle ROW_NUMBER描述(最后一個示例)了解我如何嘗試構建它。

//程序

PROCEDURE get_namelist
  (
    return_code_out OUT VARCHAR2,
    return_msg_out OUT VARCHAR2,
    id_no_in IN employee.id_no%TYPE,
    page_num IN (int datatype),              
    page_size IN (int datatype),             
    name_out OUT employee.name%TYPE,
       addr_out OUT employee.addr%TYPE,
  )
  IS

  BEGIN

    return_code_out := '0000';
    return_msg_out := 'OK';

    SELECT i.name, i.addr INTO name_out, addr_out, 
         FROM 
             (SELECT e.name, e.addr,
              ROW_NUMBER() OVER (ORDER BY e.name) as row           
              FROM employee e
              WHERE e.id_no = id_no_in) i
         WHERE row between ((page_num - 1) * page_size) AND (page_num * page_size);

END get_namelist;

//java

DbUtil db = null;
java.sql.CallableStatement cstmt = null;


db = new DbUtil();
cstmt = db.prepareCall("{ call jack.PACK_EMPLOYEE.get_namelist(?, ?, ?, ?, ?, ?, ?) }");

cstmt.registerOutParameter(1,OracleTypes.VARCHAR);
cstmt.registerOutParameter(2,OracleTypes.VARCHAR);
cstmt.setString(3,this.getIdNo());
cstmt.setString(4,pagenum);
cstmt.setString(5,pagesize);
cstmt.registerOutParameter(6,OracleTypes.VARCHAR);
cstmt.registerOutParameter(7,OracleTypes.VARCHAR);
stmt.execute();

this.setName(cstmt.getString(4));
this.setAddress(cstmt.getString(5));

每當您需要與顯示頁面不同的頁面時,您都可以使用不同的 pagenum 通過 Java 調用該過程。

暫無
暫無

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

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