﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Java之路-文章分类-数据库</title><link>http://www.blogjava.net/sxt0823/category/18383.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 03 Mar 2007 08:56:49 GMT</lastBuildDate><pubDate>Sat, 03 Mar 2007 08:56:49 GMT</pubDate><ttl>60</ttl><item><title>用标准的SQL语句实现查询记录分页</title><link>http://www.blogjava.net/sxt0823/articles/87735.html</link><dc:creator>sxt</dc:creator><author>sxt</author><pubDate>Thu, 14 Dec 2006 08:05:00 GMT</pubDate><guid>http://www.blogjava.net/sxt0823/articles/87735.html</guid><wfw:comment>http://www.blogjava.net/sxt0823/comments/87735.html</wfw:comment><comments>http://www.blogjava.net/sxt0823/articles/87735.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sxt0823/comments/commentRss/87735.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxt0823/services/trackbacks/87735.html</trackback:ping><description><![CDATA[
		<span class="tpc_content">　来源: javaresearch　<br /><br />　在绝大多数的应用中，返回大量的符合条件的记录是司空见惯的，最典型的莫过于搜索了。在搜索的应用中，用户给出搜索条件，服务器查出符合条件的记录。但往往搜索会返回大量的数据记录，如果在网页中，往往是通过分页的方式来实现，页面提供诸如上一页，下一页等等按钮来实现分页。 <br />现在主要有以下几中方式来实现分页： <br />1.EJB的Find方法 <br />2.在显示第一页前将所有的记录放在collection对象中，后续的各页都在内存中取。 <br />3.每一页都到数据库作一次重复的查询，然后将符合条件的记录显示出来。 <br />4.保存前几页的搜索结果在内存中（经常使用到的），后续的记录（这些数据是多数用户都没有耐心看的）再通过连数据库取得。 <br />5.其他各种cache机制。 <br /><br />我们可以根据实际情况来选择适合自己的方法，我给大家介绍一个通过标准的SQL语句来得到符合条件的数据。如从第10到20条的符合条件（where语句中的）的记录。通过这种方法取得记录有一个必要条件，必须有一个能够标识记录顺序的字段，如id，time等等。下面我为大家演示一个例子： <br />查询t_table表中所有记录第10到20条，按id排序。 <br />SQL语句为： <br />SELECT * FROM t_table t1 WHERE (SELECT count(*) FROM t_table t2 WHERE t2.id &lt; t1.id ) &gt; = 10 AND (SELECT count(*) FROM t_table t2 WHERE t2.id &lt; t1.id ) &lt; 20 <br /><br />又如查询t_table表中key='123'第10到20条的记录，按id排序。 <br />SELECT * FROM t_table t1 WHERE (SELECT count(*) FROM t_table t2 WHERE t2.id &lt; t1.id AND t2.key = '123') &gt; = 10 AND (SELECT count(*) FROM t_table t2 WHERE t2.id &lt; t1.id AND t2.key = '123') &lt; 20 AND t1.key = '123' <br /><br />当然条件中的id可以换为任何能表识记录顺序的字段。</span>
<img src ="http://www.blogjava.net/sxt0823/aggbug/87735.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxt0823/" target="_blank">sxt</a> 2006-12-14 16:05 <a href="http://www.blogjava.net/sxt0823/articles/87735.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>