关于查询语句中的分页问题

夏之绚烂,秋之静美 2017-12-11 09:52:56
String sql = "SELECT * FROM"
+"(SELECT empno,ename,job.hiredate,sal,comm,ROWNUM rn"
+"FROM emp"
+"WHERE" + column +"LIKE ? AND ROWNUM <= ?) temp"
+"WHERE temp.rn > ?";
this.pstmt = this.conn.prepareStatement(sql);
this.pstmt.setString(1, "%" + keyWord + "%");
this.pstmt.setInt(2, currentPage * lineSize);
this.pstmt.setInt(3, (currentPage-1) * lineSize);
keyWord模糊查询的关键字, currentPage当前所在页,lineSize 每页显示的记录数,column 模糊查询的数据列
新手,看得头很乱,没什么思路。有没有好心人能帮我详细的讲解一下?
拜托了!
...全文
110 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
听雨停了 2017-12-11
  • 打赏
  • 举报
回复
分页有风险,需谨慎啊
二月十六 版主 2017-12-11
  • 打赏
  • 举报
回复
楼主可以把拼接完的语句打印出来看一下,会更清楚,
SELECT  *
FROM    ( SELECT    empno ,								
                    ename ,
                    job.hiredate ,
                    sal ,
                    comm ,
                    ROWNUM rn
          FROM      emp
          WHERE     [column] LIKE '%' + keyWord + '%'				--查询条件	
                    AND ROWNUM <= currentPage * lineSize			--按照查询条件,查询当前页之前(包含当前页)的所有数据
        ) temp	
WHERE   temp.rn > ( currentPage - 1 ) * lineSize					--获取当前页数据
吸尘器 2017-12-11
  • 打赏
  • 举报
回复
把查询语句的"?"用下面注入的参数替换下就看懂了吖。 SELECT * FROM (SELECT empno,ename,job.hiredate,sal,comm,ROWNUM rn" FROM emp" WHERE column LIKE ‘%keyWord%’ AND ROWNUM <= currentPage * lineSize) temp WHERE temp.rn > (currentPage-1) * lineSize 括号里面的是查询当前页数之前所有条数,例如 lineSize=10(每页显示10条),currentPage=2(当前第2页),则括号里面就是查询前20条( ROWNUM <= 20)。括号外面是为了排除当前页数之前的记录。当前页数为2,则排除第一页的1-10条,保留11-20条。即第二页数据

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧