http://www.csdn.net/expert/topic/771/771284.xml?temp=.8353235
http://www.csdn.net/expert/topic/735/735915.xml?temp=.5487635
http://www.csdn.net/expert/topic/735/735915.xml?temp=.5487635
解决方案 »
- Spring开发的导包问题!!
- Struts2 在拦截器中想重新定向跳转地址,如何实现
- 探求Oracle数据库怎样存储图片
- 一个servlet调用bean打开数据库的问题!读取session值的问题!
- 请教sql2005+tomcat6的JNDI读取数据库空指针异常
- 在Linux下怎么才能让tomcat在用户登录前启动?
- 如何不让后台函数自动执行
- access不注册odbc数据源,放tomcat服务器什么位置呀
- 大家推荐本jsp的书,最好还有jscript和常用开发工具的介绍,谢谢
- 有关JDBC的问题(在线)
- 请问jsp中,<%@include file="aa.jsp"%>和<jsp:include page="aa.jsp" flush="true"/>有什么区别?
- jsp connect to sqlserver7.0 give this error information....
Hafele今天又重新看了JSP论坛(v1.0)的代码,觉得里面有很多是重复的,如分页技术;现在写了一个分页 JavaBean,等有更多的时间再整理一下JSP论坛的代码。当然里面的还有很多逻辑可以用JavaBean来写的,有待 慢慢改进。不过在此声明,我对JavaBean也不是很了解,希望高手多多指点,当然更希望这些垃圾代码能够对 你有所帮助。
该JavaBean必须调用另一个连接数据库的JavaBean,该JavaBean所用到的数据库是MySql,不过你可以通过 修改Linkdb.java来将其改为另一种数据库。为了使代码容易理解,我尽量做了解释。代码具体如下: 一、连接数据库的JavaBean:Linkdb.java %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Linkdb.java%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
package pagination; import java.sql.*; public class Linkdb {
String strDriver="org.gjt.mm.mysql.Driver";
//使用时请具体修改数据库名称,用户名和密码。
String strConn="jdbc:mysql://localhost/forum?user=root&password=admin";
private Connection conn = null;
private Statement stmt = null;
ResultSet rs = null; public Linkdb()
{
//连接MySql_jdbc驱动程序
try {
Class.forName(strDriver).newInstance();
} catch (Exception E) {
System.err.println("不能连接MySql数据库!");
}
}
//执行Select语句
public ResultSet executeQuery(String sql) {
rs = null;
try {
conn = DriverManager.getConnection(strConn);
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
}catch(SQLException ex) {
System.err.println("执行SQL语句出错:" + ex.getMessage());
}
return rs;
} //执行Insert,Update语句
public void executeUpdate(String sql) {
stmt = null;
rs=null;
try {
conn = DriverManager.getConnection(strConn);
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
stmt.executeQuery(sql);
stmt.close();
conn.close();
}
catch(SQLException ex) {
System.err.println("执行SQL语句出错: " + ex.getMessage());
}
} public void closeStmt(){
try{
stmt.close();
}
catch(SQLException e){
e.printStackTrace();
}
} public void closeConn(){
try{
conn.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
} 二、分页的JavaBean:Pagi.java
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Pagi.java%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
package pagination; import java.util.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*; public class Pagi
{
ResultSet CountTopicrs=null; //初始化总记录数Rs变量
ResultSet Pagirs=null; //初始化分页时Rs变量 public int intCountTopic=0; //主题总数
public int intPageSize; //每页显示主题数
public int intPageCount; //总页数
public int intPage=1; //当前页数
// int i; public String nowPage; //初始化当前页intPage变量,以准确便获取当前页。
public String HttpFile; //当前的地址栏的文件。 Linkdb db; //定义Linkdb类的一个对象。
//定义构造器,初始化每页显示的主题数和数据库的连接。
public Pagi(){
intPageSize=2;
db = new Linkdb();
} //Countsql:总记录的Query字符串。[形式为select count(*) from tablename]
//Pagisql :要分页的Query字符串。[形式为select * from tablename where ...]
//request :参数传递过程中的变量。[用来控制翻页时的pages变量] public ResultSet querySql(String Countsql,String Pagisql,HttpServletRequest request)
throws SQLException{
//获取当前文件名。
HttpFile=request.getRequestURI(); //获取当前页,将数值赋予intPage变量。[分页栏中必须要有pages参数]
nowPage=request.getParameter("pages"); if (nowPage==null){ intPage=1; }
else{ intPage=Integer.parseInt(nowPage); if (intPage<1) intPage=1; } //获取总记录数的结果集。
CountTopicrs=db.executeQuery(Countsql);
if (CountTopicrs.next())
{
intCountTopic=CountTopicrs.getInt(1);
}
//获取总页数。
intPageCount = (intCountTopic+intPageSize-1)/intPageSize;
//如果当前页大于总页数,则当前页等于总页数。
if (intPage>intPageCount)
{
intPage=intPageCount;
}
//关闭总主题数的数据集。
CountTopicrs.close(); //获取执行分页的结果集。
Pagirs=db.executeQuery(Pagisql);
return Pagirs;
}//end querySql function. //获取记录总数。
public int getCountTopic()
{
return intCountTopic;
} //获取总页数。
public int getPageCount()
{
return intPageCount;
} //获取当前页数。
public int getIntPage()
{
return intPage;
} //获取当前页的数据。boodata为True,表示要加入该数据到当前页。
//这里可能会在JSP调用时影响速度[因为调用时要多一层循环],因此放到JSP中嵌入,待改进。
//该代码暂时保留。
// public boolean getData(){
// boolean boodata=false;
// if (intPageCount>0)
// {
// try
// {
// while (Pagirs.next())
// {
// i++;
/// if (i>((intPage-1)*intPageSize) &&(i<=intPage*intPageSize))
// {
// boodata=true;
// }
// } //endwhile.
// }//end try.
// catch(Exception e){
// System.out.println(e.toString());
// }
// } //endif.
// return boodata;
// } //end getData(); //分页栏函数。
public String PageFooter() {
String str = "";
int next, prev;
prev=intPage-1;
next=intPage+1;
str +="共<font color="red">"+getCountTopic()+"</font>篇"+" 分<font color="red">"+getPageCount()+"</font>页显示";
str +=" 第<font color="red">"+getIntPage()+"</font>页 ";
if(intPage>1)
str += " <A href=" + HttpFile + "?pages=1"+">第一页</A> ";
else str += " 第一页 "; if(intPage>1)
str += " <A href=" + HttpFile + "?pages=" + prev + ">上一页</A> ";
else str += " 上一页 "; if(intPage<intPageCount)
str += " <A href=" + HttpFile + "?pages=" + next + ">下一页</A> ";
else str += " 下一页 "; if(intPageCount>1&&intPage!=intPageCount)
str += " <A href=" + HttpFile + "?pages=" + intPageCount + ">最后页</A>";
else str += " 最后页 "; return str;
} } //end. 三、调用实例:testpage.jsp
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%testpage.java%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<%@ page language="java" import="java.sql.*, pagination.*" %>
<%@ page contentType="text/html; charset=gb2312" %>
<jsp:useBean id="pagi" scope="page" class="pagination.Pagi" />
<html> <body>
<table border=1 align="center">
<%
String CountQuery="select count(*) from member";
String query = "select * from member";
//读queyrSql方法,返回结果集。
ResultSet rs = pagi.querySql(CountQuery,query, request);
String footer = pagi.PageFooter(); //读分页栏 out.println("<tr><td align="center"><font color="red">姓名</font></td><td align="center"><font color="red">来自</font></td></tr>");
if (pagi.intPageCount>0)
{
int i=0;
while (rs.next())
{
i++;
String aa="";
String bb="";
if (i>((pagi.intPage-1)*pagi.intPageSize) &&(i<=pagi.intPage*pagi.intPageSize))
{
aa=rs.getString(2);
bb=rs.getString(4);
%>
<tr><td><%=aa%></td><td><%=bb%></td></tr>
<%
}
} //endwhile.
} //endif.
out.println("<tr><td colspan=2>"+footer+"</td></tr>");
rs.close();
%>
</table>
</body>
</html>