目前手头上没有具体的实例,不过可以把想法告诉你,有两种方法可以实现:
方法一,把所有的记录读出来,放在List里,然后控制每一页显示的数量,控制显示数量在struts中是用<logic:iterate/>和<bean:write/>标签来实现,一个控制循环,一个控制显示,具体分页的方法要自己来定义,可以自己定义一个标签,也可以在页面里写JSP代码。
方法二,是只读取当前页面所需要的数据,每次翻页都是从数据库读取,其他和方法一一致。优缺点分析:方法一可以让用户感觉上下翻页速度快,缺点是在首次读数据的时候慢,而且不能及时更新读出来的数据,不能保证C/S的数据一致性。方法二优点是能够保证C/S数据一致,每次从数据库读数据速度比方法一快,缺点是:多次从数据库读数据,对数据库服务器的稳定性影响比较大。
方法一,把所有的记录读出来,放在List里,然后控制每一页显示的数量,控制显示数量在struts中是用<logic:iterate/>和<bean:write/>标签来实现,一个控制循环,一个控制显示,具体分页的方法要自己来定义,可以自己定义一个标签,也可以在页面里写JSP代码。
方法二,是只读取当前页面所需要的数据,每次翻页都是从数据库读取,其他和方法一一致。优缺点分析:方法一可以让用户感觉上下翻页速度快,缺点是在首次读数据的时候慢,而且不能及时更新读出来的数据,不能保证C/S的数据一致性。方法二优点是能够保证C/S数据一致,每次从数据库读数据速度比方法一快,缺点是:多次从数据库读数据,对数据库服务器的稳定性影响比较大。
相关附件: (共 76800 字节)我的项目中的分页功能
1,思路
使用一个页面控制类,它记录页面信息,如上页,下页,当前页等。在查询的Action中,将这个控制类和查询条件一起传递给数据库访问bean,然后将这两个参数保存在用户session中。在分页控制Action中,利用接收到的分页参数调用数据库访问的bean.
2,实现
见word附件
package emptyprj;
import emptyprj.lyk;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import java.util.Collection;
import java.util.ArrayList;public class lykDAO { private Connection con;
private int rowCount;
private int pageCount;
private int length;
private String pagestr;
public int getLength() { return (this.length); }
public void setLength(int length) { this.length=length; }
public String getPagestr(int ipage)
{
String strPage="";
if(getLength()>0)
{
strPage+="共";
strPage+=String.valueOf(rowCount);
strPage+="条记录,共";
strPage+=String.valueOf(pageCount);
strPage+="页,当前是第";
strPage+=String.valueOf(ipage);
strPage+="页, ";
int istart,iend;
istart=ipage-5;
if(istart<0) {istart=0;}
iend=istart+10;
if(iend>pageCount) {iend=pageCount;}
istart=iend-10;
if(istart<0) {istart=0;}
for(int i=istart;i<iend;i++)
{
strPage+="<a href='lykAction.do?action=find&page=";
strPage+=String.valueOf(i+1);
strPage+="'>";
strPage+=String.valueOf(i+1);
strPage+="</a>";
strPage+=" ";
}
}
this.pagestr=strPage;
return strPage;
} public lykDAO(Connection con) {
this.con = con;
} public void create(lyk m_lyk) throws SQLException {
PreparedStatement ps = null;
//<createSQL>
String sql = "INSERT INTO dbo.TABLE1 VALUES (?,?,?)";
//</createSQL>
try {
if (con.isClosed()) {
throw new IllegalStateException("error.unexpected");
}
ps = con.prepareStatement(sql);
//<create>
ps.setString(1,m_lyk.get姓名());
ps.setString(2,m_lyk.get性别());
ps.setInt(3,m_lyk.get年龄());
//</create> if (ps.executeUpdate() != 1) {
throw new SQLException ("error.create.lyk");
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("error.unexpected");
} finally {
try {
if (ps != null)
ps.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("error.unexpected");
}
}
} public void update(lyk m_lyk,String keyID) {
PreparedStatement ps = null;
//<updateSQL>
String sql = "UPDATE dbo.TABLE1 SET 姓名 = ?,性别 = ?,年龄 = ? WHERE 姓名 = ?";
//</updateSQL>
try {
if (con.isClosed()) {
throw new IllegalStateException("error.unexpected");
}
ps = con.prepareStatement(sql);
//<update>
ps.setString(1,m_lyk.get姓名());
ps.setString(2,m_lyk.get性别());
ps.setInt(3,m_lyk.get年龄());
//</update> ///////////////
//<updatekeyID>
ps.setString(4,keyID);
//</updatekeyID>
if (ps.executeUpdate() != 1) {
throw new SQLException (
"error.removed.lyk");
} } catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("error.unexpected");
} finally {
try {
if (ps != null)
ps.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("error.unexpected");
}
}
} public void removeID(String keyID) {
//<removeIDSQL>
String sql="DELETE FROM dbo.TABLE1 WHERE ";
sql+="姓名";
sql+=" = ?";
//</removeIDSQL> PreparedStatement ps = null;
try { if (con.isClosed()) {
throw new IllegalStateException("error.unexpected");
} ps = con.prepareStatement(sql);
//<setremovekeyIDdata>
ps.setString(1,keyID);
//</setremovekeyIDdata>
if (ps.executeUpdate() != 1) {
throw new SQLException (
"error.removed.lyk");
} } catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("error.unexpected");
} finally {
try {
if (ps != null)
ps.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("error.unexpected");
}
}
} public Collection findSQL(String sql,int ipage) {
PreparedStatement ps = null;
ResultSet rs = null;
ArrayList list = new ArrayList(); try {
if (con.isClosed()) {
throw new IllegalStateException("error.unexpected");
}
ps = con.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = ps.executeQuery();
rs.absolute(-1);
rowCount=rs.getRow();
int offset=1;
int pagesize=getLength();
if(getLength()<1)
{
pagesize=rowCount;
pageCount=1;
}
else
{
pageCount=rowCount/getLength()+((rowCount%getLength())>0?1:0);
offset=(ipage-1)*getLength()+1;
if(offset<1)offset=1;
if(offset>rowCount)offset=rowCount;
}
rs.absolute(offset);
for(int i=0;i<pagesize;i++) {
lyk m_lyk= new lyk();
//<find>
m_lyk.set姓名(rs.getString(1));
m_lyk.set性别(rs.getString(2));
m_lyk.set年龄(rs.getInt(3));
//</find> rs.next();
list.add(m_lyk); } return list; } catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("error.unexpected");
} finally {
try {
if (ps != null)
ps.close();
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("error.unexpected");
}
}
}}