日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql jdbc 分页查询_JDBC与MySQL实现分页查询技术

發布時間:2025/4/5 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql jdbc 分页查询_JDBC与MySQL实现分页查询技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于通過ResultSet的光標實現數據分頁存在占用大量資源等性能方便的缺陷,所以,在實際開發中,通過采用數據庫的分頁機制來實現分頁查詢功能更為上上之策。

下面我就通過MySQL數據庫提供的分頁機制來作為案例。

創建Product類,用于封裝商品信息。該類是商品信息的JavaBean。

package bean;

import java.math.BigDecimal;

public class Product {

public static final int PAGE_SIZE = 2;//每頁記錄數

private int p_id;//編號

private String p_name;//名稱

private BigDecimal p_price;//價格

public int getP_id() {

return p_id;

}

public void setP_id(int p_id) {

this.p_id = p_id;

}

public String getP_name() {

return p_name;

}

public void setP_name(String p_name) {

this.p_name = p_name;

}

public BigDecimal getP_price() {

return p_price;

}

public void setP_price(BigDecimal p_price) {

this.p_price = p_price;

}

}

在Product類中,主要封裝了商品對象的基本信息。除此之外,我還定義了分頁的每頁記錄數。

創建ProductDao類,主要用于封裝商品對象的數據庫相關操作。該類是商品信息的Dao層。

package dao;

import bean.Product;

import util.DBUtil;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.ArrayList;

import java.util.List;

public class ProductDao {

/**

* 分頁查詢所有商品信息

*

* @param page 頁數

* @return List

*/

public List findAllProduct(int page) {

List productList = new ArrayList<>();//實例化List對象

Connection conn = null;//數據庫連接

PreparedStatement pstmt = null;//PreparedStatement

ResultSet rs = null;//結果集

//limit arg0,arg1 指定查詢起始位置,指定查詢數據所返回的記錄數

String sql = "select p_id,p_name,p_price from product order by p_id limit ?,?";//分頁查詢的SQL語句

try {

conn = DBUtil.getCon();//獲取數據庫連接

pstmt = conn.prepareStatement(sql);//獲取PreparedStatement

pstmt.setInt(1, (page - 1) * Product.PAGE_SIZE);//對SQL語句第一個參數賦值

pstmt.setInt(2, Product.PAGE_SIZE);//對SQL語句第二個參數賦值

rs = pstmt.executeQuery();//執行查詢操作

while (rs.next()) {

Product product = new Product();

product.setP_id(rs.getInt("p_id"));//對p_id屬性賦值

product.setP_name(rs.getString("p_name"));//對p_name屬性賦值

product.setP_price(rs.getBigDecimal("p_price"));//對p_price屬性賦值

productList.add(product);//將Product對象添加到List集合中

}

} catch (Exception e) {

e.printStackTrace();

} finally {

DBUtil.close(rs, pstmt, conn);//關閉進行回收資源

}

return productList;

}

/**

* 查詢總記錄數

*

* @return count總記錄數

*/

public int findAllProductCount() {

int count = 0;//總記錄數

Connection conn = null;//數據庫連接

PreparedStatement pstmt = null;//PreparedStatement

ResultSet rs = null;//結果集

String sql = "select count(*) from product";//查詢總記錄數的SQL語句

try {

conn = DBUtil.getCon();//獲取數據庫連接

pstmt = conn.prepareStatement(sql);//獲取PreparedStatement

rs = pstmt.executeQuery();//執行查詢操作

if (rs.next()) {//光標向后移動,并判斷是否有效

count = rs.getInt(1);//對總記錄數賦值

}

} catch (Exception e) {

e.printStackTrace();

} finally {

DBUtil.close(rs, pstmt, conn);//關閉回收資源

}

return count;//返回總記錄數

}

}

findAllProduct(int page) ;方法,用來查詢指定頁數的商品。page參數,用來指定頁數。

findAllProductCount();方法,用來查詢總記錄數。這樣一次查詢,即可知道總記錄數。

缺點在于,一旦有新的記錄產生,在下一次查詢后,有一些記錄不會被查詢到,因此待優化。

創建FindAllProduct類,該類是分頁查詢商品信息的Servlet對象。在doGet()方法中,對分頁請求進行處理。

package servlet;

import bean.Product;

import dao.ProductDao;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.util.List;

@WebServlet("/FindAllProduct")

public class FindAllProduct extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) {

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

int currPage = 1;//當前頁碼

if (request.getParameter("page") != null) {//判斷傳遞頁面是否有效

currPage = Integer.parseInt(request.getParameter("page"));//對當前頁碼賦值

}

ProductDao dao = new ProductDao();//實例化ProductDao

List productList = dao.findAllProduct(currPage);//查詢所有商品的信息

request.setAttribute("productList", productList);//將list放置到request中

int pages;//總頁數

int count = dao.findAllProductCount();//查詢總記錄數

if (count % Product.PAGE_SIZE == 0) {

pages = count / Product.PAGE_SIZE;//對總頁數賦值

} else {

pages = count / Product.PAGE_SIZE + 1;//對總頁數賦值

}

StringBuilder sb = new StringBuilder();//實例化StringBuffer

for (int i = 1; i <= pages; i++) {

if (i == currPage) {

sb.append("[").append(i).append("]");//構建分頁條

} else {

sb.append("").append(i).append("");//構建分頁條

}

}

sb.append(" ");//構建分頁條

request.setAttribute("bar", sb.toString());//將分頁條的字符串放置到request中

request.getRequestDispatcher("product.jsp").forward(request, response);//將請求轉發到product.jsp頁面中

}

}

FindAllProduct類主要做兩件事,獲取分頁查詢結果集和構造分頁條對象。

分頁查詢結果集的實現,通過調用ProductDao類的findAllProduct(page)方法。

構造分頁條對象是通過拼接html字符串進行構造,然后使用Servlet中的HttpServletRequest對象,將請求轉發至product.jsp頁面做出展示。

創建product.jsp頁面,該頁面通過EL表達式和JavaAPI獲取查詢的結果集與分頁條來分頁顯示商品信息數據。

Created by IntelliJ IDEA.

User: wen

Date: 2019/1/20

Time: 15:43

To change this template use File | Settings | File Templates.

--%>

商品展示

商品信息展示

ID商品名稱價格
${item.p_id}${item.p_name}${item.p_price}

最后附上我封裝的JDBC連接數據庫的工具類DBUtil

package util;

/**

* 連接數據庫

*/

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class DBUtil {

/**

* 獲取連接

*

* @return Connection

* @throws Exception 異常

*/

public static Connection getCon() throws Exception {

//數據庫驅動名字

String jdbcName = "com.mysql.jdbc.Driver";

Class.forName(jdbcName);

//數據庫協議地址

String dbUrl = "jdbc:mysql://129.204.104.108:3306/guowenrui?useUnicode=true&characterEncoding=UTF-8";

//數據庫用戶名

String dbUser = "guowenrui";

//數據庫密碼

String dbPassword = "gwr123";

Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);

return conn;

}

/**

* 關閉連接

*

* @param stmt Statement

* @param conn Connection

* @throws Exception 異常

*/

public static void close(Statement stmt, Connection conn) throws Exception {

if (stmt != null) {

stmt.close();

if (conn != null) {

conn.close();

}

}

}

/**

* 關閉連接

*

* @param cstmt CallableStatement

* @param conn Connection

* @throws Exception 異常

*/

public static void close(CallableStatement cstmt, Connection conn) throws Exception {

if (cstmt != null) {

cstmt.close();

if (conn != null) {

conn.close();

}

}

}

/**

* 關閉連接

*

* @param pstmt PreparedStatement

* @param conn Connection

* @throws SQLException SQL異常

*/

public static void close(PreparedStatement pstmt, Connection conn) {

if (pstmt != null) {

try {

pstmt.close();

if (conn != null) {

conn.close();

}

} catch (SQLException e) {

e.printStackTrace();

}

}

}

/**

* 重載關閉方法

*

* @param pstmt PreparedStatement

* @param conn Connection

* @throws Exception 異常

*/

public static void close(ResultSet rs, PreparedStatement pstmt, Connection conn) {

if (rs != null) {

try {

rs.close();

if (pstmt != null) {

pstmt.close();

if (conn != null) {

conn.close();

}

}

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

展示效果圖如下:

總結

以上是生活随笔為你收集整理的mysql jdbc 分页查询_JDBC与MySQL实现分页查询技术的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。