JSP jquery简单无刷新分页(oracle数据库)
最近在用JSP写一个小项目的时候,需要用到分页。但是以前写的PHP版本的跟这个稍微有一点不同,就研究了下,自己写了个分页。现在跟大家分享一下,欢迎指正。我就直接贴代码了。
一.页面js中导入jquery.js和page.js
然后在页面js中调用函数cut_page(page,count,div)
page-------需要分页的页面
count------每页记录数量
div--------放记录的div,别忘加#
eg.cut_page("main.jsp",10,"#content")
二.当前页面导入包conn.DBbean和conn.OptionSP然后在内容中添加如下内容
//OptionSP构造函数中的student_info是表名和条件查询语句(eg. "book where id>3")count需要和上面js的count一样,也是每页记录数
OptionSP sp=new OptionSP("student_info",count);
String start_op=request.getParameter("start");
if(start_op==null)
{
sp.set_start(1);
}
else
{
int start_cp=Integer.parseInt(start_op);
sp.set_start(start_cp);
}
三.将你页面输出数据的sql语句放在如下语句中
"select * from (select t.*,rownum as h from (SQL语句) t ) where
h>="+sp.get_start()+" and h<"+sp.get_end())
这个是ORACLE和MYSQL不一样的控制输出记录条数的语句,比mysql麻烦。我还是更喜欢简单mysql。
四.下面的代码是显示控制的,把它放在页面div(这个div就是cut_page()里面的div)内的任何地方
//
<input type='text' value=<%=sp.get_start()%> id='help_fenye' last_start='<%=sp.get_last_start()%>' style='display:none'>
<span id='first_page' style='cursor:pointer;'>首页</span>
<span id='prev_page' style='cursor:pointer;'>上一页</span>
<span id='next_page' style='cursor:pointer;'>下一页</span>
<span id='last_page' style='cursor:pointer;'>末页</span>
<span>当前第<%=sp.get_now_page() %>/<%=sp.get_max_page()%> 页</span>(共<%=sp.get_count_num()%>条记录)
附带:
conn.DBbean内容(与orcle连接的类,用户名密码自己改下)如下(保存在DBbean.java文件中)
//--------------------------分割线---------------------------------
package conn;
import java.sql.*;
public class DBbean {
private String driver_url="oracle.jdbc.driver.OracleDriver";
private String conn_url="jdbc:oracle:thin:@localhost:1521:orcl";
private String db_user="cp";
private String pass="123";
private Connection conn=null;
private Statement stmt=null;
public DBbean(){
//建立连接
try{
Class.forName(driver_url);
conn=DriverManager.getConnection(conn_url,db_user,pass);
stmt=conn.createStatement();
}
catch (Exception e)
{
System.out.println("无法建立连接");
}
}
//查询方法
public ResultSet executeQuery(String s)
{
ResultSet rs=null;
try{
rs=stmt.executeQuery(s);
}
catch(Exception e){
System.out.println("执行查询出现错误");
}
return rs;
}
//更新方法
public int executeUpdate(String s){
int result=0;
try{
result=stmt.executeUpdate(s);
}
catch(Exception e)
{
System.out.println("更新出现未知错误");
}
return result;
}
//返回Connection,用于orcle事务
public Connection reConnection()
{
return conn;
}
//关闭statement对象及连接
public void close(){
try{
conn.close();
stmt.close();
}
catch(Exception e)
{ }
}
}
//-----------------分割线-------------------------------------
conn.OptionSP内容如下(保存在OptionSP.java文件中)
//-----------------分割线-------------------------------------
package conn;
import java.sql.ResultSet;
public class OptionSP{
private int count_num=0;//记录总数
private int last_start=0;//用于控制输出
private int start;//用于控制输出
private int end=0;//用于控制输出
private int now_page=0;//当前第几页
private int max_page=0;//共有多少页
private int per_page_records=0;//每页记录数量
public DBbean dbb=new DBbean();
//构造方法设置页面显示记录条数
public OptionSP(String table_name,int num){
this.per_page_records=num;
String sql="select count(*) from "+table_name;
try {
ResultSet rs_count_cp=dbb.executeQuery(sql);
rs_count_cp.next();
//设置count_num
count_num=rs_count_cp.getInt(1);
dbb.close();
}
catch(Exception e)
{
System.out.print("SQL错误");
}
float a=(float)count_num;
//设置last_start
last_start=((int)Math.ceil(a/per_page_records)-1)*per_page_records+1;
float count_num_var=(float)count_num;
max_page=(int)Math.ceil(count_num_var/per_page_records);
}
//返回每页记录条数
public int get_per_page_records(){
return this.per_page_records;
}
//获取记录数量count_num
public int get_count_num()
{
return count_num;
}
//获取last_start
public int get_last_start()
{
return last_start;
}
//设置start
public void set_start(int start_cp)
{
int last_start_var=get_last_start();
start=start_cp;
if(start>=last_start_var)
{
start=last_start_var;
}
//设置end
end=start+per_page_records;
//设置now_page
now_page=(start-1)/per_page_records+1;
}
//获取start
public int get_start()
{
return start;
}
//获取end
public int get_end()
{
return end;
}
//获取now_page
public int get_now_page()
{
return now_page;
}
//获取max_page
public int get_max_page()
{
return max_page;
}
public static void main(String args[])
{
}
}
//-------------------------------分割线------------------------
jquery.js直接从网上下载,目前最新是1.8的
page.js如下
//ps是处理分页记录的页面,num是每页显示记录条数,odiv是显示数据的DIV
function cut_page(ps,num,odiv)
{
//首页
$("#first_page").click(function(){
var start=1;
$.post(ps,{"start":start},function(data){
$(odiv).html(data);
})
})
//上一页
$("#prev_page").click(function(){
var start_1=parseInt($("#help_fenye").val());
var start=start_1-num;
if(start<1)
{
start=1;
}
$.post(ps,{"start":start},function(data){
$(odiv).html(data);
})
})
//下一页
$("#next_page").click(function(){
var start_1=parseInt($("#help_fenye").val());
var start=start_1+num;
$.post(ps,{"start":start},function(data){
$(odiv).html(data);
})
})
//尾页
$("#last_page").click(function(){
var start=parseInt($("#help_fenye").attr("last_start"));
$.post(ps,{"start":start},function(data){
$(odiv).html(data);
})
})
}
[最优解释]
可以结合json,这样ajax分页更有通用性。
[其他解释]
楼主好人呀,我菜鸟正在培训正好要用到分页,研究一下
[其他解释]
学习了,回去试一试去