jsp 分页

来源:百度知道 编辑:UC知道 时间:2024/06/08 03:09:53
页面显示不了数据
请高手们看看哪里出错了

数控库连接部分
package PetShop;
import java.sql.*;
import javax.servlet.http.*;
import java.util.*;
public class DataBaseLink {
HttpSession session=null;
ResultSet rs=null;
Connection conn=null;
Statement sta=null;
String url="sun.jdbc.odbc.JdbcOdbcDriver";

public void Link(){
try{
Class.forName(url);
}
catch(Exception e1){
e1.printStackTrace();
}
try{ conn=DriverManager.getConnection("jdbc:odbc:test");
sta=conn.createStatement();
}
catch(Exception e2){
e2.printStackTrace();
}
}

public List eXecute(String sql){
List l=new ArrayList();
try{
rs=sta.executeQuery(sql);
int k=rs.getMetaData().getColumnCount();
while(rs.next()){
Object []obj=new Object[k];
for(int i=1;i<=k;i++)
obj[i-1]=rs.getObject(i);<

我先不说哪里错了,首先这种分页方式是非常不好的,因为你是把数据库里所有的数据检索出来存放在数组里,然后根据不同的页码循环遍历,这样做有个巨大的缺陷,试想一下,如果表里存放了大量数据,每次分页都需要重新查询,这是多么大的工作量。如果翻一页都需要等几分钟,这样做无疑是没有前途的。

一般来说正确的做法应该是只查询当前页面的数据,比如:你10条分一页,第一页就只查询前10条数据并显示出来,第二页只查询11~20条数据并显示出来,依次类推,每次翻页只需要查询很少量的数据,这样速度会非常快。

那么如何做呢,我简单的说下思路,关键的是sql语句,这里以SQL SERVER数据库举例。

假设有用户表users,字段有,id,name,sex,age,address;其中ID是主键
那么查询第一条到第十条数据的Sql语句很简单,就是
select top 10 * from users
那么查询后十条如何做呢,我们用一个子查询。
首先把前十条的ID号查出来:
select top 10 id from users
然后把他嵌套在上面一个sql语句中,也就是:
select top 10 * from users where id not in(select top 10 id from users)

这条语句就是先查询出前10条的ID号,然后根据条件,ID不在这10个ID中的最排前的10条,如果是第三页,只需要查询前20个ID,不再这20个ID的数据中的排前的10条,也就是:
select top 10 * from users where id not in(select top 20 id from users)
那么我们可以看到不同的页面只需要根据第二个查询语句的top参数来设置。
不知道这样说你明白没有。

警告的内容是什么?