|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
那这个对象有什么意义?现在很多用javabean的人就不能保证对象有完整的意义,不成熟的使用模式等导致代码疯狂增长,调试维护的时间要得多得多。在说性能之前,先说说你这个比较的来历。据说微软为了证明。net比java好。js|条记|分页|数据|数据库|显现这篇文章先容的是用javabean和jsp页面来完成数据的分页显现,例子中所利用的数据库是Mysql。
1、先看javabean
类名:
databaseBean.java:
以下为databaseBean.java的代码:
packagedatabase_basic;
importjava.sql.*;
importjava.util.*;
publicclassdatabaseBean
{
//这是默许的数据库毗连体例
privateStringDBLocation="jdbc:mysql://localhost/onestoptech?user=root&password=password&useUnicode=true&characterEncoding=GB2312";
privateStringDBDriver="org.gjt.mm.mysql.Driver";
privateConnectionconn=null;
publicdatabaseBean(){}
//经由过程set办法能够天真设置数据库的毗连
publicvoidsetDBLocation(Stringlocation){DBLocation=location;}
publicvoidsetDBDriver(Stringdriver){DBDriver=driver;}
publicvoidsetconn(Connectionconn){this.conn=conn;}
publicStringgetDBLocation(){return(DBLocation);}
publicStringgetDBDriver(){return(DBDriver);}
publicConnectiongetconn(){return(conn);}
/*publicStringDBConnect(){}
publicStringDBDisconnect(){}
publicResultSetquery(Stringsql){}
publicintgetTotalPage(Stringsql,intpageSize){}
publicResultSetgetPagedRs(Stringsql,intpageSize,intpageNumber){}
publicStringexecute_sql(Stringsql){}*/
//创建毗连
publicStringDBConnect()
{
StringstrExc="Success!";//strExc默许为Success,假如有破例抛出,即数据库毗连不乐成,则上面几个catch中被付与其他抛出信息
try
{
Class.forName(DBDriver);
conn=DriverManager.getConnection(DBLocation);
}
catch(ClassNotFoundExceptione)
{
strExc="数据库驱动没有找到,毛病提醒:<br>"+e.toString();
}
catch(SQLExceptione)
{
strExc="sql语句毛病,毛病提醒<br>"+e.toString();
}
catch(Exceptione)
{
strExc="毛病提醒:<br>"+e.toString();
}
return(strExc);
}//thenendofDBConnect
//断开毗连
publicStringDBDisconnect()
{
StringstrExc="Success!";//strExc默许为Success,假如有破例抛出,即数据库断开毗连不乐成,则上面几个catch中被付与其他抛出信息
try
{
if(conn!=null)conn.close();
}
catch(SQLExceptione)
{
strExc=e.toString();
}
return(strExc);
}
//经由过程传进sql语句来前往一个了局集
publicResultSetquery(Stringsql)throwsSQLException,Exception
{
ResultSetrs=null;
if(conn==null)
{
DBConnect();
}
if(conn==null)
{
rs=null;
}
else
{
try
{
Statements=conn.createStatement();
rs=s.executeQuery(sql);
}
catch(SQLExceptione){thrownewSQLException("Coundnotexecutequery.");}
catch(Exceptione){thrownewException("Coundnotexecutequery.");}
}//thenendofif
return(rs);
}//thenendofthefunctionexecuteQuery
//经由过程传进sql语句和pageSize(每页所显现的了局数量)盘算并前往统共的页数
publicintgetTotalPage(Stringsql,intpageSize)
{
ResultSetrs=null;
inttotalRows=0;
if(conn==null)
{
DBConnect();
}
if(conn==null)
{
rs=null;
}
else
try
{
Statements=conn.createStatement();
rs=s.executeQuery(sql);//经由过程传进的sql失掉了局集
while(rs.next())
totalRows++;//让rs一个个数,数完一遍,经由过程totalRows++也就盘算出了前往了局会合总的条目数
}
catch(SQLExceptione){}
rs=null;
//由这个算法得出总页数(totalRows-1)/pageSize+1,并前往了局。totalRows是指前往了局会合的总的条目数,pageSize是指每页显现的条目数
return((totalRows-1)/pageSize+1);
}
//经由过程传进sql语句,每页显现的条目数(pageSize)和页码,失掉一个了局集
publicResultSetgetPagedRs(Stringsql,intpageSize,intpageNumber)
{
ResultSetrs=null;
intabsoluteLocation;
if(conn==null)
{
DBConnect();
}
if(conn==null)
{
rs=null;
}
else
try
{
Statements=conn.createStatement();
//pageSize*pageNumber每页显现的条目数乘以页码,盘算出最初一行了局的编号,任何编号年夜于这个maxrows的了局城市被drop
s.setMaxRows(pageSize*pageNumber);
rs=s.executeQuery(sql);
}
catch(SQLExceptione){}
//absoluteLocation=pageSize*(pageNumber-1)这个表达式盘算出上一页最初一个了局的编号(假如有本页的话,上一页的显现的了局条目数一定是pageSize)
absoluteLocation=pageSize*(pageNumber-1);
try
{
//这个for轮回的感化是让了局集rs定位到本页之前的最初一个了局处
for(inti=0;i<absoluteLocation;i++)
{
rs.next();
}
}
catch(SQLExceptione){}
//此时前往的了局集被两端一夹,就是该页(pageNumber)要显现的了局
return(rs);
}
publicStringexecute_sql(Stringsql){
StringstrExc;
strExc="Success!";
if(conn!=null)
{
try{
PreparedStatementupdate;
update=conn.prepareStatement(sql);
update.execute();
}
catch(SQLExceptione)
{
strExc=e.toString();
}
catch(Exceptione)
{
strExc=e.toString();
}
}
else
{
strExc="ConnectionLost!";
}
return(strExc);
}//execute_sql
2、剖析jsp页面
页面称号:
admin_show.jsp
页面代码:
<%@pageerrorPage="error.jsp"%>
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="java.util.*"%>
<%@pageimport="java.sql.*"%>
//导进database_basic包上面的databaseBean类,别号是basicDB
<jsp:useBeanid="basicDB"class="database_basic.databaseBean"scope="page"/>
<%
Stringsql;
ResultSetrs;
intid;
Stringreply,Exc;
Exc=basicDB.DBConnect();//创建毗连,若乐成,则前往Success!若失利,则前往响应堕落信息
if(!Exc.equals("Success!"))
{
//basicDB.DBDisconnect();
thrownewException(Exc);
}
intpageSize=10;//界说每页显现的数据条数
intcurrentPage=1;//以后页(第一次显现的一定是第一页啦!~),今后的“以后页”由上面呈现的页面中的pages参数传进
intallPage=-1;
Stringpages=request.getParameter("pages");//获得页面中pages参数,此参数代表的页面的就是要显现的“以后页面”
if(pages!=null)currentPage=Integer.valueOf(pages).intValue();//这是一个Integer型转int型的例子,第一次实行这个页面的时分,pages这个参数是null,currentPage=1;当再次实行这个页面的时分,参数pages将被赋值,currentPage=pages的int值
sql="select*fromgbookorderbyiddesc";//如许前往的了局会议接纳desc降序分列,优点是,显现在后面的是最新的信息
allPage=basicDB.getTotalPage(sql,pageSize);//失掉总页码数
rs=basicDB.getPagedRs(sql,pageSize,currentPage);//失掉以后页面要显现的了局集
%>
<tableborder="0"cellspacing="1"cellpadding="3"width="590"bgcolor="#ffffff">
<%
while(rs.next()){
id=rs.getInt("id");//失掉数据库(了局集)中id编号
%>
<trbgcolor="#FF6600"style="color:white">
<td>Name:<%=rs.getString("leaver")%></td>
<td>Time:<%=rs.getString("leave_date")%></td>
<td>Email:<%=rs.getString("email")%></td>
<td><divstyle="width:150;overflow:hidden;">Home:<%=rs.getString("homepage")%></div></td>
</tr>
<trbgcolor="#FFE3B9">
<tdcolspan=4><FONTCOLOR="#FF6600">Content:</FONT><BR><BR><%=rs.getString("content")%></td>
</tr>
<%}%>
<tr><tdheight="1"></td></tr>
<tr>
<tdcolspan=4align=rightbgcolor="#FF6600"style="color:white;">
如今是第<%=currentPage%>页,
<%if(currentPage>1){%>
<!--假如不在第一页,则显现出“首页”链接-->
<AHREF="admin_show.jsp?pages=<%=(currentPage-1)%>">首页</A>
<%}
for(inti=1;i<=allPage;i++)
{
//显现出1、2、3、4……到最初一页的链接
out.println("<ahref=admin_show.jsp?pages="+i+">"+i+"</a>");
}
%>
<%if(currentPage<allPage){%>
<!--假如不在最初一页,则显现出“末页”链接-->
<AHREF="admin_show.jsp?pages=<%=(currentPage+1)%>">末页</A>
<%}%></td>
</tr>
</table>
}//thenendoftheclass
3、总结
这个完成分页显现的程序中,有几个算法和完成办法是对照流动且典范的,对没写太过页程序的人来讲,应当有所启示。
************************************************************************************************************************
天职析呈报由王智伟完成
原文《完成JSP分页显现数据库(mysql)》请见:潇湘网论坛论坛->web编程--JSP->完成JSP分页显现数据库(mysql)FredHuang
*************************************************************************************************************************
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试) |
|