数据库分页查询,ASP基础入门:ADO存取数据库时如何分页显示
数据库分页查询,ASP基础入门:ADO存取数据库时如何分页显示详细介绍
本文目录一览: Mysql如何查询某条记录在分页的第几页详析
前言在实践中我们会遇到这样的问题,知道某条记录的id,然后需要判断此条记录如果按照id进行排序分页,此条记录在第几页。今天这篇文章为大家提供一个思路。下面话不多说了,来一起看看详细的实现方法吧根据ID查询分页位置根据ID来查询分页位置,比如按照ID的倒序排列,则可通过以下SQL查询出大于此ID记录数:select count(id) from user where id > 5;示例中user为表名,5位待匹配的id。很显然,因为是倒序排序只需查找大于此id的记录数即可,如果是正序排列,则小于此id即可。当查出count值之后,怎么计算当前记录位于第几页呢,这里以java代码示例计算:int pageSize = 10;// 假设上面查出的结果为count,值为11int count = 11;// 计算当前记录所在的pageNum// 通过取模并加1获得当前页数为第2页int pageNum = count/pageSize + 1;// 如果想进一步获得在某页的某个位置,则再进行取余即可,即第2页的第1条记录(从0开始)int index = count%pageSize;多维度排序定位上面通过简单的ID进行排序还是比较好解决的,那么如果现在查询某条记录排序的维度不仅仅是ID,比如先按照年龄(age)进行倒序排序,如果age相同,则再跟进ID进行倒序排序。基本的sql语句如下:select id, age from user order by age desc,id desc;此时我们知道某条id为5,age为18的记录,如何确定出此条记录在多条件排序中的位置呢。首先,多条件排序的难度在于age相同的情况,如果age不相同,只需如下sql即可像《根据ID查询分页位置》一样定位出id的位置:select count(id) from user where age > 18;这样就可以查询出来此组合排序age不相同时此条记录的位置,具体位置的算法同第一种情况。那么当age用重复的情况如何处理呢。当然,可以通过复杂的关联查询或子表查询来实现,这里通过另外一种方式,就是再查询一下age相同,并且id大于当前用户的记录条数:select count(id) from user where age = 18 and id > 5;上面获得了age相同情况下,并且id大于5的记录,将第一步和第二步的统计结果相加,问题是不是又回到了《根据ID查询分页位置》的简单模式了,还是同样的算法可以算出当前记录位于第几页了。此种方案虽然查询了两次数据库,如果很好的建立索引,比关联查询或子查询要方便、简洁和高效一些。小结以上是在实践中遇到类似问题的两个思考维度,希望能给大家带来一个突破,同时也希望大家提供更好的方案。好了,
java中数据库中实现分页的sql语句要求每页十条要查询的是第二页
1、首先preparedstatement是statement的子接口,属于预处理操作,与直接使用statement不同的是,preparedstatement在操作的时候,先在数据表中准备好了一条sql语句,但是sql语句的值暂时不设置,而是之后设置。
2、在使用statement的时候,要执行一条完整的失去了,在执行钱使用connection直接创建的。
3、如何获得preparedstatement,在connection接口中,通过preparedstatement(String sql)得到。
4、最后在日期输入的时候,正常情况都是使用java.util.date表示日期,在 preparedStatement中需要使用java.sql.date类型,如下图所示就完成了。
如何通用存储过程来对MySQL分页查询进行操作
以下的文章主要描述的是通用存储过程来对MySQL分页查询进行正确的操作,你如果对MySQL分页查询进行正确的操作有兴趣的话你就可以点击以下的文章进行观看了。望你浏览之后能有所收获。 前段时间没有给出SQLServer转到MySQL(和PHP搭配之最佳组合)的通用存储过 以下的文章主要描述的是通用存储过程来对MySQL分页查询进行正确的操作,你如果对MySQL分页查询进行正确的操作有兴趣的话你就可以点击以下的文章进行观看了。望你浏览之后能有所收获。前段时间没有给出SQLServer转到MySQL(和PHP搭配之最佳组合)的通用存储过程,本着共享的精神,为大家奉献这段MySQL分页查询通用存储过程,假设所用数据库为guestbook:use guestbook; delimiter $$ drop procedure if exists prc_page_result $$ create procedure prc_page_result ( in currpage int, in columns varchar(500), in tablename varchar(500), in sCondition varchar(500), in order_field varchar(100), in asc_field int, in Prima(最完善的虚拟主机管理系统)ry_field varchar(100), in pagesize int ) begin declare sTemp varchar(1000); declare sSql varchar(4000); declare sOrder varchar(1000);if asc_field = 1 then set sOrder = concat(' order by ', order_field, ' desc '); set sTemp = '(select max'; end if;if currpage = 1 then if sCondition'' then set sSql = concat('select ', columns, ' from ', tablename, ' where '); set sSql = concat(sSql, sCondition, sOrder, ' limit ?'); else set sSql = concat('select ', columns, ' from ', tablename, sOrder, ' limit ?'); end if; else if sCondition'' then set sSql = concat('select ', columns, ' from ', tablename); set sSql = concat(sSql, ' where ', sCondition, ' and ', Prima(最完善的虚拟主机管理系统)ry_field, sTemp); set sSql = concat(sSql, '(', Prima(最完善的虚拟主机管理系统)ry_field, ')', ' from (select '); set sSql = concat(sSql, ' ', Prima(最完善的虚拟主机管理系统)ry_field, ' from ', tablename, sOrder); set sSql = concat(sSql, ' limit ', (currpage-1)*pagesize, ') as tabtemp)', sOrder); set sSql = concat(sSql, ' limit ?'); else set sSql = concat('select ', columns, ' from ', tablename); set sSql = concat(sSql, ' where ', Prima(最完善的虚拟主机管理系统)ry_field, sTemp); set sSql = concat(sSql, '(', Prima(最完善的虚拟主机管理系统)ry_field, ')', ' from (select '); set sSql = concat(sSql, ' ', Prima(最完善的虚拟主机管理系统)ry_field, ' from ', tablename, sOrder); set sSql = concat(sSql, ' limit ', (currpage-1)*pagesize, ') as tabtemp)', sOrder); set sSql = concat(sSql, ' limit ?'); end if; end if; set @iPageSize = pagesize; set @sQuery = sSql; prepare stmt from @sQuery; execute stmt using @iPageSize; end; $$ delimiter; 可以存储为数据库脚本,然后用命令导入:MySQL(和PHP搭配之最佳组合) -u root -p 调用:
ASP基础入门:ADO存取数据库时如何分页显示
《动态网站设计十八般武艺 --ASP 篇》一文从第一期至今已和朋友们一起度过了大半个年头,相信通过在这一段时间中的学习、实践到再学习、再实践,大家已经能够熟练运用 ASP 的内建对象、 ActiveX 组件去编写一些基本的 ASP 应用程序。从我收到的朋友们的来信中可以明显的感觉到,大家的 ASP 功力正不断地提升。最近很多朋友来信希望我写一些 ASP 在现实运用中的实例。因此,从本期开始我决定将《动态网站设计十八般武艺 --ASP 篇》的定位从介绍和学习 ASP 基础知识转向到 ASP 实际运行的探讨和深化。应朋友们的要求,在本期中我将给大家着重谈一谈“ADO 存取数据库时如何分页显示”的问题。什么是 ADO 存取数据库时的分页显示?如果你使用过目前众多网站上的电子公告板程序的话,那你应该会知道电子公告板程序为了提高页面的读取速度,一般不会将所有的帖子全部在一页中罗列出来,而是将其分成多页显示,每页显示一定数目的帖子数,譬如 20 条。这就是数据库查询的分页显示,如果你还不明白,去看看 yahoo 等搜索引擎的查询结果就会明白了。那么究竟如何才能做到将数据库的查询结果分页显示呢?其实方法有很多,但主要有两种:一、将数据库中所有符合查询条件的记录一次性的都读入 recordset 中,存放在内存中,然后通过 ADO Recordset 对象所提供的几个专门支持分页处理的属性: PageSize( 页大小 )、 PageCount( 页数目 ) 以及 AbsolutePage( 绝对页 ) 来管理分页处理。二、根据客户的指示,每次分别从符合查询条件的记录中将规定数目的记录数读取出来并显示。两者的主要差别在于前者是一次性将所有记录都读入内存然后再根据指示来依次做判断分析从而达到分页显示的效果,而后者是先根据指示做出判断并将规定数目的符合查询条件的记录读入内存,从而直接达到分页显示的功能。我们可以很明显的感觉到,当数据库中的记录数达到上万或更多时,第一种方法的执行效率将明显低于第二种方法,因为当每一个客户查询页面时都要将所有符合条件的记录存放在服务器内存中,然后在进行分页等处理,如果同时有超过 100 个的客户在线查询,那么 ASP 应用程序的执行效率将大受影响。但是,当服务器上数据库的记录数以及同时在线的人数并不是很多时,两者在执行效率上是相差无几的,此时一般就采用第一种方法,因为第一种方法的 ASP 程序编写相对第二种方法要简单明了得多。在这里作者就以我们常见的 ASP BBS 程序为例,来给大家分析一下如何在 BBS 程序里实现分页显示功能,由于我们一般使用的 BBS 程序的数据库记录数和同时访问的人数都不会太多,所以以下程序实例是使用的先前所介绍的第一种分页显示方法。进行 ADO 存取数据库时的分页显示,其实就是对 Recordset 的记录进行操作。所以我们首先必须了解 Reordset 对象的属性和方法:BOF 属性:目前指标指到 RecordSet 的第一笔。EOF 属性:目前指标指到 RecordSet 的最后一笔。Move 方法:移动指标到 RecordSet 中的某一条记录。AbsolutePage 属性:设定当前记录的位置是位于哪一页 AbsolutePosition 属性:目前指标在 RecordSet 中的位置。PageCount 属性:显示 Recordset 对象包括多少“页”的数据。PageSize 属性:显示 Recordset 对象每一页显示的记录数。RecordCount 属性:显示 Recordset 对象记录的总数。下面让我们来详细认识一下这些重要的属性和方法一、 BOF 与 EOF 属性通常我们在 ASP 程序中编写代码来检验 BOF 与 EOF 属性,从而得知目前指标所指向的 RecordSet 的位置,使用 BOF 与 EOF 属性,可以得知一个 Recordset 对象是否包含有记录或者得知移动记录行是否已经超出该 Recordset 对象的范围。如:% if not rs.eof then ... %% if not (rs.bof and rs.eof) %若当前记录的位置是在一个 Recordset 对象第一行记录之前时, BOF 属性返回 true,反之则返回 false。若当前记录的位置是在一个 Recordset 对象最后一行记录之后时, EOF 属性返回 true,反之则返回 false。BOF 与 EOF 都为 False:表示指标位于 RecordSet 的当中。BOF 为 True:目前指标指到 RecordSet 的第一笔记录。 EOF 为 True:目前指标指到 RecordSet 的最后一笔记录。BOF 与 EOF 都为 True:在 RecordSet 里没有任何记录。二、 Move 方法您可以用 Move 方法移动指标到 RecordSet 中的某一笔记录,语法如下:rs.Move NumRecords,Start这里的“rs”为一个对象变量,表示一个想要移动当当前记录位置的 Recordset 对象;“NumRecords”是一个正负数运算式,设定当前记录位置的移动数目;“start”是一个可选的项目,用来指定记录起始的标签。所有的 Recordset 对象都支持 Move 方法,如果 NumRecords 参数大于零,当前记录位置向末尾的方向移动;如果其小于零,则当前记录位置向开头的方向移动;如果一个空的 Recordset 对象调用 Move 方法,将会产生一个错误。MoveFirst 方法:将当前记录位置移至第一笔记录。MoveLast 方法:将当前记录位置移至最后一笔记录。MoveNext 方法:将当前记录位置移至下一笔记录。 MovePrevious 方法:将当前记录位置移至上一笔记录。Move [n] 方法:移动指标到第 n 笔记录, n 由 0 算起。三、 AbsolutePage 属性AbsolutePage 属性设定当前记录的位置是位于哪一页的页数编号;使用 PageSize 属性将 Recordset 对象分割为逻辑上的页数,每一页的记录数为 PageSize( 除了最后一页可能会有少于 PageSize 的记录数 )。这里必须注意并不是所有的数据提供者都支持此项属性,因此使用时要小心。与 AbsolutePosition 属性相同, AbsolutePage 属性是以 1 为起始的,若当前记录为 Recordset 的第一行记录, AbsolutePage 为 1。可以设定 AbsolutePage 属性,以移动到一个指定页的第一行记录位置。四、 AbsolutePosition 属性若您需要确定目前指标在 RecordSet 中的位置,您可以用 AbsolutePosition 属性。AbsolutePosition 属性的数值为目前指标相对於第一笔的位置,由 1 算起,即第一笔的 AbsolutePosition 为 1。注意 , 在存取 RecordSet 时,无法保证 RecordSet 每次都以同样的顺序出现。若要启用 AbsolutePosition,必须先设定为使用用户端 cursor( 指针 ), asp 码如下:rs2.CursorLocation = 3五、 PageCount 属性使用 PageCount 属性,决定 Recordset 对象包括多少“页”的数据。这里的“页”是数据记录的集合,大小等于 PageSize 属性的设定,即使最后一页的记录数比 PageSize 的值少,最后一页也算是 PageCount 的一页。必须注意也并不是所有的数据提供者都支持此项属性。六、 PageSize 属性PageSize 属性是决定 ADO 存取数据库时如何分页显示的关键,使用它就可以决定多少记录组成一个逻辑上的“一页”。设定并建立一个页的大小,从而允许使用 AbsolutePage 属性移到其它逻辑页的第一条记录。 PageSize 属性能随时被设定。七、 RecordCount 属性这也是一个非常常用和重要的属性,我们常用 RecordCount 属性来找出一个 Recordset 对象包括多少条记录。如:% totle=RS.RecordCount %在了解了 Recordset 对象的以上属性和方法后,我们来考虑一下,如何运用它们来达到我们分页显示的目的。首先,我们可以为 PageSize 属性设置一个值,从而指定从记录组中取出的构成一个页的行数;然后通过 RecordCount 属性来确定记录的总数;再用记录总数除以 PageSize 就可得到所显示的页面总数;最后通过 AbsolutePage 属性就能完成对指定页的访问。好象很并不复杂呀,下面让我们来看看程序该如何实现呢?我们建立这样一个简单的 BBS 应用程序,它的数据库中分别有以下五个字段:“ID”,每个帖子的自动编号;“subject”,每个帖子的主题;“name”,加帖用户的姓名; “email”,用户的电子邮件地址;“postdate”,加帖的时间。数据库的 DSN 为“bbs”。我们将显示帖子分页的所有步骤放在一个名为“ShowList()”的过程中,方便调用。程序如下:\'----BBS 显示帖子分页----% Sub ShowList() %%PgSz=20 \'设定开关,指定每一页所显示的帖子数目,默认为20帖一页Set Conn = Server.CreateObject("ADODB.Connection")Set RS = Server.CreateObject("ADODB.RecordSet")sql = "SELECT * FROM message order by ID DESC"\'查询所有帖子,并按帖子的ID倒序排列Conn.Open "bbs"RS.open sql,Conn,1,1If RS.RecordCount=0 thenresponse.write " P center对不起,数据库中没有相关信息! /center /P"elseRS.PageSize = Cint(PgSz) \'设定PageSize属性的值Total=INT(RS.recordcount / PgSz * -1)*-1 \'计算可显示页面的总数PageNo=Request("pageno")if PageNo="" ThenPageNo = 1else#p#副标题#e#PageNo=PageNo+1PageNo=PageNo-1end ifScrollAction = Request("ScrollAction")if ScrollAction = " 上一页 " ThenPageNo=PageNo-1end ifif ScrollAction = " 下一页 " ThenPageNo=PageNo+1end ifif PageNo1 ThenPageNo = 1end ifn=1RS.AbsolutePage = PageNoResponse.Write " CENTER"position=RS.PageSize*PageNopagebegin=position-RS.PageSize+1if positionRS.RecordCount thenpagend=positionelsepagend= RS.RecordCountend ifResponse.Write " P font color=\'Navy\' B数据库查询结果: /B"Response.Write "(共有"RS.RecordCount "条符合条件的信息,显示"pagebegin"-"pagend") /font /p"Response.Write " TABLE WIDTH=600 BORDER=1 CELLPADDING=4 CELLSPACING=0 BGCOLOR=#FFFFFF"Response.Write " TR BGCOLOR=#5FB5E2 FONT SIZE=2 TD B主题 /B /TD TD B用户 /B /TD TD BEmail /B /TD TD B发布日期 /B /TD /FONT TR BGCOLOR=#FFFFFF"Do while not (RS is nothing)RowCount = RS.PageSizeDo While Not RS.EOF and rowcount 0If n=1 thenResponse.Write " TR BGCOLOR=#FFFFFF"ELSEResponse.Write " TR BGCOLOR=#EEEEEE"End Ifn=1-n %TD span style="font-size:9pt" A href=\'view.asp?key= % =RS("ID")%\' % =RS("subject")% /A /span /tdTD span style="font-size:9pt" % =RS("name")% /A /span /tdTD span style="font-size:9pt" a href="mailto: % =RS("email")%" % =RS("email")% /a /span /TDTD span style="font-size:9pt" % =RS("postdate")% /span /td/TR%RowCount = RowCount - 1RS.MoveNextLoopset RS = RS.NextRecordSetLoopConn.Closeset rs = nothingset Conn = nothing%/TABLEFORM METHOD=GET ACTION="list.asp"INPUT TYPE="HIDDEN" NAME="pageno" VALUE=" % =PageNo %"%if PageNo 1 Thenresponse.write " INPUT TYPE=SUBMIT NAME=\'ScrollAction\' VALUE=\' 上一页 \'"end ifif RowCount = 0 and PageNoTotal thenresponse.write " INPUT TYPE=SUBMIT NAME=\'ScrollAction\' VALUE=\' 下一页 \'"end ifresponse.write " /FORM"End if%% End Sub %相信大家都应该能完全读懂上面的程序,因此作者就不在此详细解释了。值得注意的是在这段程序中运用了一个小技巧INPUT TYPE="HIDDEN" NAME="pageno" VALUE=" % =PageNo %",这是用来在每次调用该 ASP 文件时传递数据的“暗道”,由于我们需要在每次调用程序时传递代表当前页码的参数,可能大家会想到使用 session,但是从节省系统资源和通用性来讲,用这样一个隐藏的 form 来传递数据将会达到更好的效果。#p#副标题#e#
java的jsp如何分页显示查询结果?
分页显示一般有两种实现方式:业务层分页、数据库层分页(以下会用到两个参数,提前说明下 page:请求第几页,size:每页显示多少条)
业务层分页:从数据库取出所有数据,然后通过传过来的page和size对所有数据截取,比如一共查了100条数据,保存在list里面,要求查询第2页,每页显示10条,则可以通过list属性,取100条数据 中的第11条到第20条,可通过遍历实现。
数据库层分页:数据库都会有分页函数(mysql 是limit函数,sqlServer是row_number()函数,可自行百度下)该方法是通过传过来的page和size在查询数据库时就开始分页,以mysql为例,查询第2页,每页显示10条,则sql语句是 ”select * from XX limit 10,10“(第一个10表示从下标为10开始查,第二个10是共读取10条)
性能肯定是第二种分页方式好,只要搞懂分页原理,想实现分页其实很简单,只要搞清楚分页是将多条数据中的某几条挑出来
Java
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。
SQL语句分页查询,一页面多少数据合适
2万条。在SQLServer中通过SQL语句实现分页查询,在SQLServer中通过SQL语句实现分页后插入数据2万条,用更多的数据测试会明显一些。微软的SQLSERVER提供了两种索引:聚集索引,也称聚类索引、簇集索引和非聚集索引,也称非聚类索引、非簇集索引。建立一个web应用,分页浏览功能必不可少。这个问题是数据库处理中十分常见的问题。经典的数据分页方法是:ADO纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页。但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放在内存中,很费内存。游标一建立,就将相关的记录锁住,直到取消游标。游标提供了对特定集合中逐行扫描的手段,一般使用游标来逐行遍历数据,根据取出数据条件的不同进行不同的操作。而对于多表和大表中定义的游标(大的数据集合)循环很容易使程序进入一个漫长的等待甚至死机。更重要的是,对于非常大的数据模型而言,分页检索时,如果按照传统的每次都加载整个数据源的方法是非常浪费资源的。现在流行的分页方法一般是检索页面大小的块区的数据,而非检索所有的数据,然后单步执行当前行。最早较好地实现这种根据页面大小和页码来提取数据的方法大概就是“俄罗斯存储过程”。这个存储过程用了游标,由于游标的局限性,所以这个方法并没有得到大家的普遍认可,后来,网上有人改造了此存储过程,实现了分页储存。
sql查询结果通过java处理不能分页
分页原理:进行数据库查询操作时,获取到数据库中所有满足条件的记录,保存在应用的临时数组中,再通过List的subList方法,获取到满足条件的所有记录。
实现:首先在dao层,创建StudentMapper接口,用于对数据库的操作。在接口中定义通过数组分页的查询方法,如下所示:
方法很简单,就是获取所有的数据,通过list接收后进行分页操作。创建StudentMapper.xml文件,编写查询的sql语句.
什么叫“分页查询”?
当数据量过大时,可能会导致各种各样的问题发生,例如:服务器资源被耗尽,因数据传输量过大而使处理超时,等等。最终都会导致查询无法完成。
解决这个问题的一个策略就是“分页查询”,也就是说不要一次性查询所有的数据,每次只查询一“页“的数据。这样分批次地进行处理,可以呈现出很好的用户体验,对服务器资源的消耗也不大。
打一个比方,有很多很多人要过河,而只有一条船摆渡。若让所有人都上船,肯定会导致沉船(资源耗尽);若换一条超大的船,除了换船要很高的成本外,上船下船也要耗费很长时间。
所以最好的解决方法是,根据船的容量,每次只上一部分人。等这一船人过河以后,再摆渡下一批人。
最简单的例子,
你QQ空间的浏览版,
现在出2011了,
留言板可以分页查询了,
我上传的是我空间的分页查询,
你要是有资格你也可以看到,
这个就是分页查询
每次查询出部分结果 比如要查出的结果为1-10条
第一次查1-3 第二次4-6,第三次7-9 第四次10 向数据库中查询只要3个结果一查 而不是每次都查出所有结果 即影响查询效率又影响页面显示速度
如果说成千上万的数据,一个页面怎么可能放着下??
所以来了这个“分页查询”,也就是一次只展示10或20条数据
oracle :
select * from 表 where rownum<=10 and rownum>0;
查询前10条
就是分很多页,你看百度的问题列表,下面就有1 2 3 .。。下一页 尾页
这个就是分页,一页只显示固定的条数
分页查询,是一种操作系统里存储器管理的一种技术,可以使电脑的主存可以使用存储在辅助存储器中的数据。操作系统会将辅助存储器(通常是磁盘)中的数据分区成固定大小的区块,称为“页”(pages)。当不需要时,将分页由主存(通常是内存)移到辅助存储器;当需要时,再将数据取回,加载主存中。相对于分段,分页允许存储器存储于不连续的区块以维持文件系统的整齐。分页是磁盘和内存间传输数据块的最小单位。
扩展资料:
分页查询的页面调度类型
1、当需要用到数据时再向系统请求,使系统将数据由辅助存储器传入存储器上,这就叫“需求分页”。它使得系统不需要将全部的程序都放在存储器上,减少了所需要的存储器的数量。所有现代系统都使用按需页面调度(paging)的方式。
2、当系统查看分页表时认为某些数据可能需要用到,而先将数据传到存储器上的行为,就叫做“先行分页”, 当存储器够大的话通常会采取这种方式。
3、Unix系统会定期使用sync程序来清理所有经过更动的帧,它会将所有被更动过的帧存到辅助存储器中。Windows系统有时亦会进行类似功能的操作,它可以使新程序在打开时更快速。
如何对分库后的数据进行分页查询
1、直接使用跨库的多表联合查询。不建议。
2、向6台数据库server均发送一个查询请求,然后对所有查询结果进行汇总,再处理分页逻辑。
3、建立一个总数据库,只负责维护主键和必要的索引,以供分页查询。
4、使用redis维护一个主键序列,分页操作就是截取该序列的一部分,其结果就是主键id集合。拿到id后便可以映射到多台mysql服务器上查询数据了。但毕竟数据被分布式存储了,取到完整结果集必须要多次、多台的数据库访问,这个肯定是避免不了。
注:“多台”数据库访问的问题无解,但同台“多次”数据库访问的问题可以通过程序优化。