问题是我分页后排序出问题,我自己也说不清楚,就请大家帮我看看
接数据库的类
package connDB;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class Connbbs {
public static Connection getConn() {
Connection conn = null ;
PreparedStatement pstmt = null ;
try {
Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver" );
} catch (ClassNotFoundException e) {
System.out.println( "架桥失败!" );
e.printStackTrace();
}
try {
conn = DriverManager
.getConnection(
"jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=shout" ,
"sa" , "" );
} catch (SQLException e) {
System.out.println( "连接失败!" );
e.printStackTrace();
}
return conn;
}
public int executeSQL(String preparedSql, List list) {
Connection conn = null ;
ResultSet rs= null ;
PreparedStatement pstmt = null ;
int i = 0;
try {
conn = getConn();
pstmt = conn.prepareStatement(preparedSql);
if (list != null ) {
for ( int a = 0; a < list.size(); a++) {
pstmt.setObject(a + 1, list.get(a));
}
}
i = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
closeAll(pstmt, conn,rs);
}
return i;
}
public void closeAll(PreparedStatement pr, Connection con,ResultSet rs) {
try {
if (pr != null ) {
pr.close();
pr = null ;
}
if (con != null ) {
con.close();
con = null ;
}
if (rs!= null ){
rs.close();
rs= null ;
}
} catch (SQLException e) {
System.out.println( "关闭有误!" );
e.printStackTrace();
}
}
}
封装实体类
package Entiyi;
public class TouSuBaoGuangEntiyi {
private int TouSuID;
private String TouSuCreater;
private String TouSuCreatTime;
private String TouSutitle;
private String TouSucontent;
private String TouSuNumber;
private String TouSuPhone;
private String TouSuAddress;
private int TouSuRcount;
public String getTouSuAddress() {
return TouSuAddress;
}
public void setTouSuAddress(String touSuAddress) {
this .TouSuAddress = touSuAddress;
}
public String getTouSucontent() {
return TouSucontent;
}
public void setTouSucontent(String touSucontent) {
this .TouSucontent = touSucontent;
}
public String getTouSuCreater() {
return TouSuCreater;
}
public void setTouSuCreater(String touSuCreater) {
this .TouSuCreater = touSuCreater;
}
public String getTouSuCreatTime() {
return TouSuCreatTime;
}
public void setTouSuCreatTime(String touSuCreatTime) {
this .TouSuCreatTime = touSuCreatTime;
}
public int getTouSuID() {
return TouSuID;
}
public void setTouSuID( int touSuID) {
this .TouSuID = touSuID;
}
public String getTouSuNumber() {
return TouSuNumber;
}
public void setTouSuNumber(String touSuNumber) {
this .TouSuNumber = touSuNumber;
}
public String getTouSuPhone() {
return TouSuPhone;
}
public void setTouSuPhone(String touSuPhone) {
this .TouSuPhone = touSuPhone;
}
public String getTouSutitle() {
return TouSutitle;
}
public void setTouSutitle(String touSutitle) {
this .TouSutitle = touSutitle;
}
public int getTouSuRcount() {
return TouSuRcount;
}
public void setTouSuRcount( int touSuRcount) {
TouSuRcount = touSuRcount;
}
}
查出数据的方法
public ArrayList<TouSuBaoGuangEntiyi> select( int Count) {
ArrayList<TouSuBaoGuangEntiyi> list = new ArrayList<TouSuBaoGuangEntiyi>();
Connection con = Connbbs.getConn();
PreparedStatement ps = null ;
ResultSet rs = null ;
String sqlstr = "SELECT top 5 * FROM TouSuword where TouSuID not in (SELECT TOP " + Count * 5 + " TouSuID from TouSuword)ORDER BY TouSuRcount DESC" ;
try {
ps = con.prepareStatement(sqlstr);
rs = ps.executeQuery();
while (rs.next()) {
TouSuBaoGuangEntiyi obj = new TouSuBaoGuangEntiyi();
obj.setTouSuID(rs.getInt(1));
obj.setTouSuCreater(rs.getString(2));
obj.setTouSuCreatTime(rs.getString(3));
obj.setTouSutitle(rs.getString(4));
obj.setTouSucontent(rs.getString(5));
obj.setTouSuRcount(rs.getInt(6));
list.add(obj);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
public int [] selectAllPage(String sql, int row) {
Connection con = Connbbs.getConn();
PreparedStatement pr = null ;
ResultSet rs = null ;
int [] value = new int [2];
int allrow = 0;
try {
pr = con.prepareStatement(sql);
rs = pr.executeQuery();
while (rs.next()) {
allrow = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
Connbbs connbbs = new Connbbs();
connbbs.closeAll(pr, con, rs);
}
int allPage = allrow / row;
if (allrow % row > 0) {
allPage++;
}
value[0] = allrow;
value[1] = allPage;
return value;
}
页面
<%@ taglib prefix= "c" uri= "/WEB-INF/c.tld" %>
<%@ page language= "java" pageEncoding= "gbk" %>
<%@ page import = "Entiyi.*" %>
<jsp:directive.page import = "java.util.ArrayList" />
<%@ page import = "Wrinkle.*" %>
<html>
<head>
<style type= "text/css" >
body,td,th {
font-size: 9pt;
}
. in {
width: 150px;
height: 15px;
}
</style>
<title>留言本</title>
<meta http-equiv= "Content-Type" content= "text/html; charset=gb2312" >
<meta name= "description" content= "留言本" >
<link href= "img/1/jd100.css" rel= "stylesheet" type= "text/css" >
<style type= "text/css" >
<!--
.style12 {color: #000000; font-size: 12px; }
.style14 {color: #FF0000}
.style8 {color: #000000}
.style15 {font-size: 10px}
-->
<form name= 'form' method= 'post' action= 'index.asp'
onSubmit= 'submitonce(this)' >
<table width= "750" >
<tr>
<td align= "right" ><a href= "../answerBBS/TouSuAnswerBBS.jsp" ><img src= "../images/newtopic.gif" width= "73" height= "29" border= "0" ></a></td>
</tr>
</table>
<table width= "750" align= "center" >
<tr>
<td><img src= "../images/kuangjia.gif" width= "750" height= "20" ></td>
</tr>
</table>
<TABLE width= '750' height=51 border=1 align=center cellPadding=3
cellSpacing=0 class = 'jd_tab'
style= 'border-collapse: collapse; word-wrap: break-word;' >
<TBODY>
<TR class =jd_titlemu>
<TD width= '5%' class = 'jd_tab' >
<div align= 'center' >
回复
</div>
</TD>
<TD width= '50%' class = 'jd_tab' >
<div align= 'center' >
标题
</div>
</TD>
<TD width= '20%' class = 'jd_tab' >
<div align= 'center' >
作者
</div>
</TD>
<TD width= '25%' class = 'jd_tab' >
<div align= 'center' >
时间
</div>
</TD>
</TR>
<%
TouSuWrinkle tousuWrinkle = new TouSuWrinkle();
int value[]=tousuWrinkle.selectAllPage( "select count(*)TouSuRcount from TouSuword " ,2);
int max=value[0];
int y=value[1];
int Count = 0;
if (request.getParameter( "page" ) == null ) {
} else {
Count = Integer.parseInt((String) request.getParameter( "page" ));
}
ArrayList<TouSuBaoGuangEntiyi> list =tousuWrinkle.select(Count);
for ( int i = 0; i < list.size(); i++) {
TouSuBaoGuangEntiyi obj = list.get(i);
String image=obj.getTouSutitle();
%>
<TR class =unnamed1>
<TD width= '6%' height= '25' align=middle valign= 'top'
class = 'jd_tab' >
<%=obj.getTouSuRcount()%>
</TD>
<TD width= '53%' height= '25' align=left valign= 'top'
class = 'jd_tab' >
<a href= '../replyBBS/replyTouSuBBS.jsp?messageID=<%=obj.getTouSuID()%>' > <%=obj.getTouSutitle()%></a></TD>
<TD width= '20%' height= '25' align=middle valign= 'top'
class = 'jd_tab' >
<font color=#666666><%=obj.getTouSuCreater()%> </font>
</TD>
<TD width= '14%' height= '25' align=center valign= 'top'
class = 'jd_tab' >
<font color=#666666><%=obj.getTouSuCreatTime() %></font>
</TD>
</TR>
<%} %>
</TBODY>
</TABLE>
<table width= "750" align= "center" >
<tr>
<td><img src= "../images/kuangjia.gif" width= "750" height= "20" ></td>
</tr>
</table>
<table width= "750" >
<tr>
<td align= "right" >
<%
if (Count>1){
%>
<a
href= "TouSuBaoGuangBBS.jsp?page=<%=Count-1 %>" >上一页</a>
<%} else { %>
<a href= "../forumBBS/TouSuBaoGuangBBS.jsp?page=0" >上一页</a>
<%} %>
|
<% if (Count<y-1){
%>
<a
href= "TouSuBaoGuangBBS.jsp?page=<%=Count-1 %>" >上一页</a>
<%} else { %>
<a href= "../forumBBS/TouSuBaoGuangBBS.jsp?page=<%=Count+1 %>" >下一页</a>
<%} %>
</td>
</tr>
</table>
</body>
</html>
蓝色的都是我觉得出错的地方,出错状态,查询出值来以后以排序点下页,值不变,关键就是在查出数据的方法的SQL语句后面加这段ORDER BY TouSuRcount DESC使它降序
而降序后我点下一页就出毛病了,请高手们帮帮我解决这个问题让他能降序点下一页或上一页都能实现功能
数据库名:shout 表名:TouSuword
表里面的字段为:
类型
TouSuID int 主建,自动增长
TouSuCreater varchar
TouSuCreatTime varchar
TouSutitle varchar
TouSucontent varchar
TouSuRcount int
TouSuNumber int
TouSuPhone char
TouSuAddress varchar 主题:
Re:谁来帮我看看 主要是你的这句话错了,我猜count就是你的页数吧。
String sqlstr = "SELECT top 5 * FROM TouSuword where TouSuID not in (SELECT TOP " + Count * 5 + " TouSuID from TouSuword)ORDER BY TouSuRcount DESC" ;
你这句话的执行顺序是
1:先把数据集合降序排列。2:取出不在数据集合“(SELECT TOP "+ Count * 5 + " TouSuID from TouSuword) ”里的前五条。
所以说存在两个数据集合,一个是排序的(源数据集),一个是不排序的(条件数据集合)。所以说你基本上永远都是取的前五条数据,因为过滤数据集合其实不是你想的过滤前面的Count * 5条记录。
画个图你就明白了(懒的画),你再想想为什么不能分页,相信我你仔细研究这句话的意思!我是老程序员了!
主题:
Re:谁来帮我看看 阿龙,我实在想不到怎么做了
我换了一种方法做,用Servlse来实现的
package Servlse;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import connDB.Connbbs;
public class BaoGuangTaiForum extends HttpServlet {
public BaoGuangTaiForum() {
super ();
}
public void destroy() {
super .destroy();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
Connbbs db = new Connbbs();
ArrayList list = null ;
int page = 0;
if (request.getParameter( "page" ) != null ) {
page = Integer.parseInt(request.getParameter( "page" ));
}
session.setAttribute( "page" , page);
ArrayList listCount = db.selectAll( "select TouSuID from TouSuword" ,
null );
int pageCount = 0;
if (listCount.size() % 5 == 0) {
pageCount = listCount.size() / 5 - 1;
} else {
pageCount = (listCount.size() / 5);
}
session.setAttribute( "pageCount" , pageCount);
if (session.getAttribute( "page" ) == null ) {
session.setAttribute( "page" , 0);
String strSqql = "SELECT TOP 5 * FROM TouSuword WHERE TouSuID NOT IN("
+ " SELECT TOP 5 TouSuID FROM TouSuword order by touSuRcount desc) order by touSuRcount desc" ;
list = db.selectAll(strSqql, null );
session.setAttribute( "list" , list);
} else {
String strSqql = "SELECT TOP 5 * FROM TouSuword WHERE TouSuID NOT IN( SELECT TOP "
+ page
* 5
+ " TouSuID FROM TouSuword order by touSuRcount desc) order by touSuRcount desc" ;
list = db.selectAll(strSqql, null );
session.setAttribute( "list" , list);
}
response.sendRedirect( "forumBBS/TaiForumBBS.jsp" );
}
public void init() throws ServletException {
}
} 但是我还是想让你把我原来的方法改进下发给我看
主题:
Re:谁来帮我看看
在看你这句话servlet这句话:String strSqql = "SELECT TOP 5 * FROM TouSuword WHERE TouSuID NOT IN("
+ " SELECT TOP 5 TouSuID FROM TouSuword order by touSuRcount desc) order by touSuRcount desc" ;
因为你的你的数据集合和过滤集合都加了排序,所以你应该可以取到正确的结果... ... 我够耐心的了,老大你在开发程序,sql语句看不懂吗?
一定是你没有静心。早上我给你的那段话你改作下面的就可以了
String sqlstr = "SELECT top 5 * FROM TouSuword where TouSuID not in (SELECT TOP " + Count * 5 + " TouSuID from TouSuword order by touSuRcount desc )ORDER BY TouSuRcount DESC" ;