📄 oraclepagination.java
字号:
package webbook.chapter18;
import java.util.List;
import org.apache.commons.dbutils.handlers.*;
import org.apache.commons.dbutils.*;
import webbook.util.OracleUtil;
import java.sql.*;
import java.util.regex.*;
public class OraclePagination implements Pagination {
private int pageSize = 20;
private int pageNumber = 1;
private int maxPages;
private int maxElements;
private String sql;
private OracleUtil db;
public OraclePagination(String sql) {
this.sql = sql;
init();
}
public OraclePagination(String sql, int pageSize, int pageNumber) {
this.sql = sql;
this.pageSize = pageSize;
init();
setPageNumber(pageNumber);
}
private void init() {
db = new OracleUtil("java:/comp/env/jdbc/oracleds");
db.init();
setMaxElements();
setMaxPages();
}
private void setPageNumber(int pageNumber) {
if (pageNumber > maxPages) {
this.pageNumber = maxPages;
}else if (pageNumber < 1) {
this.pageNumber = 1;
}else {
this.pageNumber = pageNumber;
}
}
private void setMaxElements() {
String regex = "select((.)+)from";
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
String[] s = p.split(this.sql);
String newSql = "select count(1) as total from " + s[1];
ResultSetHandler handler = new ResultSetHandler() {
public Object handle(ResultSet rs) throws SQLException {
if (rs.next()) {
return new Integer(rs.getInt("total"));
} else {
return null;
}
}
};
this.maxElements = ((Integer) db.query(newSql, null, handler)).intValue();
}
public int getMaxElements() {
return maxElements;
}
private void setMaxPages() {
if (maxElements != 0 && (maxElements % pageSize == 0)) {
maxPages = maxElements / pageSize;
} else {
maxPages = maxElements / pageSize + 1;
}
}
public String sqlModify(String source, int begin, int end) {
StringBuffer target = new StringBuffer(100);
target.append("select * from ( select a.*, rownum r from ( ");
target.append(sql);
target.append(" ) a where rownum <= ");
target.append(end);
target.append(") where r>");
target.append(begin);
return target.toString();
}
public int getMaxPages() {
return maxPages;
}
public int getNext() {
if (pageNumber + 1 >= getMaxPages()) {
return getMaxPages();
} else {
return pageNumber + 1;
}
}
public int getEndElement() {
int endElement = pageNumber * pageSize;
if (endElement >= maxElements) {
return maxElements;
} else {
return endElement;
}
}
public int getBeginElement() {
return (pageNumber - 1) * pageSize + 1;
}
public List<Object> getList() {
String newSql = sqlModify(this.sql, getBeginElement(), getEndElement());
return (List) db.query(newSql, null, new MapListHandler());
}
public int getPageNumber() {
return pageNumber;
}
public int getPageSize() {
return pageSize;
}
public int getPrevious() {
if (pageNumber - 1 <= 1) {
return 1;
} else {
return pageNumber - 1;
}
}
public boolean hasNext() {
return pageNumber < getMaxPages();
}
public boolean hasPrevious() {
return pageNumber > 1;
}
public boolean isFirst() {
return pageNumber == 1;
}
public boolean isLast() {
return pageNumber >= getMaxPages();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -