使用jdbc對mysql查詢數據實現分頁並且顯示在前段頁面。在開始前創建一個訪問數據庫的工具類DBUtil
/**
*數據庫工具類
* @author 13468
*
*/
public class DBUtil {
private static DBUtil dbUtil=new DBUtil();
private DBUtil() {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
String url="jdbc:mysql://localhost:3306/booksys?useUnicode=true&characterEncoding=utf-8";
return DriverManager.getConnection(url,"root","root");
}
}
在dao層建立數據庫jdbc訪問層接口和訪問接口的實現類訪問接口,建立三個方法
//獲得用戶總數
int getUserCount();
//獲取總頁數
int getUserPage(int PageeSize);
//獲取分頁數據
List<UserInfo> getUsersPages(int currentPage,int pageSize);
訪問接口實現,來實現上面接口的方法
/**
* 獲取數據總條數
*/
@Override
public int getUserCount() {
Connection connection=null;
PreparedStatement preparedStatement=null;
ResultSet resultSet=null;
int count=0;
try {
connection=DBUtil.getConnection();
String sql="select count(*) from user";
preparedStatement=(PreparedStatement) connection.prepareStatement(sql);
resultSet=preparedStatement.executeQuery();
if(resultSet.next()) {
count=resultSet.getInt(1);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(resultSet!=null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(preparedStatement!=null) {
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection!=null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return count;
}
/**
* 算出總頁數
*/
@Override
public int getUserPage(int PageeSize) {
int count=getUserCount();//獲取總條數
int pages=(count+PageeSize-1)/PageeSize;
return pages;
}
//獲取分頁數據
@Override
public List<UserInfo> getUsersPages(int currentPage, int pageSize) {
Connection connection=null;
PreparedStatement preparedStatement=null;
ResultSet resultSet=null;
List<UserInfo>list=new ArrayList<UserInfo>();
try {
connection=DBUtil.getConnection();
String sql="select * from user limit ?,?";
preparedStatement=(PreparedStatement) connection.prepareStatement(sql);
preparedStatement.setInt(1, (currentPage-1)*pageSize);
preparedStatement.setInt(2, pageSize);
resultSet=preparedStatement.executeQuery();
while (resultSet.next()) {
int id=resultSet.getInt(1);
String username=resultSet.getString(2);
String password=resultSet.getString(3);
String name=resultSet.getString(4);
String email=resultSet.getString(5);
String phone=resultSet.getString(6);
list.add(new UserInfo(id,username,password,name,email,phone));
}
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(resultSet!=null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(preparedStatement!=null) {
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection!=null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return list;
}
service層省略,但是這個例子是創建了service層的,下面再創建控制層的servlet來調用上面的方法
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
* 分頁顯示用戶信息
*/
if (action.equals("showusers")) {
String cupage=request.getParameter("currentPage");
//獲取總頁數
int pages=service.getUserPage(pageSize);
//獲取當前頁碼
currentPage=(cupage==null)?1:Integer.parseInt(cupage);
//如果當前頁碼小於1,則賦值爲1,表示爲首頁
if(currentPage<1) {
currentPage=1;
}
//如果當前頁數大於總頁數,則賦值爲總頁數值,表示爲尾頁
if(currentPage>pages) {
currentPage=pages;
}
//將當前的頁碼保存在session中
request.getSession().setAttribute("currentPage", currentPage);
//將總頁數保存在session中
request.getSession().setAttribute("pages", pages);
//準備分頁的user數據
List<UserInfo> userInfo=service.getUsersPages(currentPage, pageSize);
//將user放入到session中
request.getSession().setAttribute("userInfo", userInfo);
//跳轉到userman.jsp頁面
response.sendRedirect("admin/userman.jsp");
}
}
通過前面的準備,現在在前段頁面JSP中接收頁碼
<div id="page" class="page_div">
<a href="/BookSystem/UserServlet?action=showusers¤tPage=1" id="firstpage">首頁</a>
<a href="/BookSystem/UserServlet?action=showusers¤tPage=${currentPage-1 }" id="prevpage">上一頁</a>
<span>${currentPage }/${pages }</span>
<a href="/BookSystem/UserServlet?action=showusers¤tPage=${currentPage+1 }" id="nextpage">下一頁</a>
<a href="/BookSystem/UserServlet?action=showusers¤tPage=${pages }" id="lastpage">末頁</a>
</div>