关于Java的分页算法,急!

希望哪位达人可以提供Java+jsp+mysql分页算法程序.要求是导航分页的效果,类似百度或Google的分页效果,并且能处理10万以上的大数据量。谢谢!
不是SQL语句问题,而是要比较好的分页算法啊,处理效率高的,要求处理大数据的嘛
希望提供jsp+mysql+jdbc 的分页程序

使用分页类,直接调用就可以,代码如下:

package com.godwin.news.util;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;

/**
* 分页类,用于封闭分页显示信息
*
* @author javabs
*
*/
public class Pager {

// 当前页
private int currentPage;
// 总页数
private int totalPage;
// 总记录数
private int totalRecord;
// 每页条数
private int pageSize;
// 是否有下一页
private int hasNext;
private ArrayList keys;
private ArrayList values;
// 查询串
private String queryString;
// 首页
private String firstLink;
// 上一页
private String previousLink;
// 下一页
private String nextLink;
// 尾页
private String lastLink;
// 链接
private String forScriptLink;

public Pager(int pageSize, String queryString) {
keys = new ArrayList();
values = new ArrayList();
setQueryString(queryString);
setPageSize(pageSize);
}

public String getForScriptLink() {
if (keys.contains("toPage"))
removeKey("toPage");
String tmp = getQueryString();
if (tmp.length() == 0)
return "?";
else
return "?" + tmp + "&";
}

public int getCurrentPage() {
return currentPage;
}

public void setCurrentPage(String toPage) {
int tmpage = 1;
try {
tmpage = Integer.parseInt(toPage);
} catch (NumberFormatException e) {
tmpage = 1;
}
if (tmpage < 1)
tmpage = 1;
else if (tmpage > getTotalPage())
tmpage = getTotalPage();
currentPage = tmpage;
}

public String getFirstLink() {
return getQueryStr(1);
}

public int getHasNext() {
int i = 1;
if (getCurrentPage() >= getTotalPage())
i = 0;
return i;
}

public String getLastLink() {
return getQueryStr(getTotalPage());
}

public String getNextLink() {
return getQueryStr(currentPage == totalPage ? currentPage : (currentPage + 1));
}

public int getPageSize() {
return pageSize;
}

public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}

public String getPreviousLink() {
return getQueryStr(currentPage == 1 ? currentPage : currentPage - 1);
}

public void setPreviousLink(String previousLink) {
this.previousLink = previousLink;
}

public String getQueryString() {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < keys.size(); i++) {
String key = (String) keys.get(i);
String value = (String) values.get(i);
sb.append("&");
sb.append(key);
sb.append("=");
sb.append(value);
}

return sb.delete(0, 1).toString();
}

public void setQueryString(String queryString) {
if (queryString != null) {
String s[] = queryString.split("&");
for (int i = 0; i < s.length; i++) {
String s1[] = s[i].split("=");
if (s1.length == 2) {
keys.add(s1[0]);
values.add(s1[1]);
} else {
keys.add(s1[0]);
values.add("");
}
}

}
}

public int getTotalPage() {
return totalPage;
}

public void setTotalPage() {
if (totalRecord % pageSize == 0) {
totalPage = totalRecord / pageSize;
totalPage = totalPage == 0 ? 1 : totalPage;
}
else
totalPage = totalRecord / pageSize + 1;
}

public int getTotalRecord() {
return totalRecord;
}

public void setTotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
setTotalPage();
}

public String[] getQueryParameterValues(String key) {
return getQueryParameterValues(key, "UTF-8");
}

public String[] getQueryParameterValues(String key, String decode) {
ArrayList ret = new ArrayList();
for (int i = 0; i < keys.size(); i++)
if (((String) keys.get(i)).equals(key))
try {
ret.add(URLDecoder.decode((String) values.get(i), decode));
} catch (UnsupportedEncodingException e) {
ret.add((String) values.get(i));
}

if (ret.size() == 0)
return null;
String strArr[] = new String[ret.size()];
for (int i = 0; i < ret.size(); i++)
strArr[i] = (String) ret.get(i);

return strArr;
}

public String getQueryParameter(String key) {
return getQueryParameter(key, "UTF-8");
}

public String getQueryParameter(String key, String decode) {
String value = "";
if (key != "toPage") {
try {
value = URLDecoder.decode(getValue(key), decode);
} catch (UnsupportedEncodingException e) {
value = getValue(key);
}
} else {
int tmpage = 1;
try {
value = getValue(key);
tmpage = Integer.parseInt(value);
} catch (NumberFormatException e) {
tmpage = 1;
} catch (NullPointerException e1) {
tmpage = 1;
}
if (tmpage < 1)
tmpage = 1;
else if (tmpage > getTotalPage())
tmpage = getTotalPage();
value = (new StringBuffer(String.valueOf(tmpage))).toString();
}
return value;
}

public void setQueryParameter(String key, String value) {
if (key.equals("toPage"))
removeKey(key);
keys.add(key);
values.add(value);
}

public String getQueryStr(int toPage) {
setQueryParameter("toPage", (new StringBuffer(String.valueOf(toPage))).toString());
return "?" + getQueryString();
}

private String getValue(String key) {
String ret = "";
for (int i = 0; i < keys.size(); i++) {
if (!((String) keys.get(i)).equals(key))
continue;
ret = (String) values.get(i);
break;
}

return ret;
}

private void removeKey(String key) {
for (int i = 0; i < keys.size(); i++) {
if (!((String) keys.get(i)).equals(key))
continue;
keys.remove(i);
values.remove(i);
break;
}

}

public static void main(String args[]) {
String str = "a=中文aa&b=2&c=3&c=4&c=5";
Pager page = new Pager(2, str);
page.setTotalRecord(10);
page.setCurrentPage("1");
System.out.println(page.getFirstLink());
System.out.println(page.getPreviousLink());
System.out.println(page.getNextLink());
System.out.println(page.getLastLink());
String s = page.getQueryParameter("a");
System.out.println("s: " + s);
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-12
你想效率高 你就直接使用jdbc连接数据库,然后自己封装一个标签,结合servlet做自己的分页标签
第2个回答  2010-05-11
你用到框架吗,hibernate自带的分页就不错啊,可以尝试用下啊
第3个回答  2010-05-11
没太懂你的问题,分页的SQL语句不会写?
相似回答