「内存分页java」内存分页和物理分页
今天给各位分享内存分页java的知识,其中也会对内存分页和物理分页进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java分页查数据防止内存溢出问题
- 2、java分页有什么好处?
- 3、Java Web开发时 如何提高分页效率?
- 4、JAVA项目中的真分页与假分页的代码怎么写~
- 5、java 数据来自不同的库怎么分页
- 6、java分页
java分页查数据防止内存溢出问题
首先你要明白内存溢出的含义,内存溢出简单的来说就是内存不够了。
打个比方:内存就像一个大水缸,数据库就是水库。从数据库中查询数据就像从水库中抽水到大水缸。如果一次性抽取太多的水(超过大水缸的容量),大水缸肯定放不下(溢出了)。分页查询就好比一点一点的抽水到大水缸。jvm有垃圾回收机制,每次抽到水缸中的水可能用完后就被销毁了,水缸中的水不会一直增长下去。如果水缸中的水一直增长,就叫内存泄露。
你上面的代码不完全,不知道是否会内存溢出。如果每次循环在getComments方法中把查询的结果都放到一个List中,就可能会溢出。当然这个和数据库中的数据量和jvm的内存配置大小有关系。
java分页有什么好处?
准确来说分页一般都是数据库分页
分页的原因如下:
1、提高性能,一次查20个,比一次查20000个性能肯定更好;另外如果数据量很大,一次性将内容都查询出来,查询出来的结果是放在内存里面的,内存没有这么大
2、不需要这么多数据,如新闻,一般人可能只看最近前20条;如果我们将后面的也都查询出来了,就是浪费
3、展现层面的考虑:如果一次展现太多的数据,不管是排版,还是美观上都不好
Java Web开发时 如何提高分页效率?
建议还是使用带条件查询的sql,这样返回的结果集不会太大。实现分页通常有两种方式,根据具体情况而选择:
1. 把读取的结果集存放在集合中,然后进行分页算法实现分布,这种方式会将内容读取到内存,所以建议带条件查询的结果集使用;
2. 使用数据库的特性,根据传入分页数据(起始位置、读取数目等)来读取数据库。
JAVA项目中的真分页与假分页的代码怎么写~
真分页:每次从数据库里按照排序方法,取一段数据,比如每页20条,第一页就是1-20 ,第二页就是21-40。它是每次都从数据库里查询。都是最新的。假分页:一次从数据库里得到很多页的数据,然后缓存起来。比如每页20条,一次取了100条,缓存起来。第一页依然是1-20 ,第二页就是21-40。到第6页的时候,再从数据库里取101-200条,在缓存起来。只不过,取数据的时候不是从数据库里取了,而是在缓存里取。但是这个数据有可能不是最新的,因为不是直接从数据库里查询的。这种多用在更新不多的数据上。
java 数据来自不同的库怎么分页
方法很多,可以将数据同步到同一个库下进行多表查询,也可以将多库查询出来的时候全部查出来,在代码中写一个算法进行分页,当然这种分页效率会很低,
java分页
分页想清楚了就没什么难的了。一般有两种(我就知道两种):
1.数据库分页:
/**
* @param pageItems:一页显示条数 currentPage:当前第几页
* @autor godelegant
*/
public List findAll(int pageItems,int currentPage){
StringBuffer sqlStr = new StringBuffer("select * from Product limit ?,?");
...
...
int startIndex = (currentPage-1)*pageItems;);//(currentPage-1)*pageItems能过当前页和页面记录数得到应该从哪条开始取
int endIndex = startIndex+pageItems;
db.getPstmt().setInt(1,startIndex);
db.getPstmt().setInt(2,endIndex);
ResultSet rs = db.getPstmt().executQuery();//假设你已经得到了数据库连接
//以上为MYSQL的JDBC分页,下面是ORALCE的,差别只在于SQL,所以你换一下SQL就OK:
StringBuffer sqlStr = new StringBuffer("select *,rownum rn from (select * from Product) where rn =? and rownum =?");
}
求总页数的方法很简单,查出所有记录数,除一页显示数。就可以得到
以上是JDBC的,如果使用hibernate等,数据库分页将会变得很简单,只需要设置两个参数,就是从哪取和取多少。
2.代码分页
思路是将数据库中的所有记录都取出来,然后再分页。
/**
* @para items:数据库中的所有记录,你可以使用另一个方法得到,如何查询得到我就不用说了吧
* @autor godelegant
*/
public List findAll(List items,int pageItems,int currentPage){
int startIndex = (currentPage-1)*pageItems;//从哪里开始取
int offset = items.size()-startIndex;//还有多少没有取过
int pageCount = offsetpageItems?pageItems:offset;//如果没有取过的大于需要显示的数,则实现显示数pageCount=pageItems,反之然;
ListProduct pageList = new ArrayList();
for(int i=startIndex,istartIndex+pageCount,i++){
pageList.add(items.get(i));
}
return pageList;
}
写了40分钟,希望对你有用
内存分页java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于内存分页和物理分页、内存分页java的信息别忘了在本站进行查找喔。