分页查询信息

      使用jdbc连接mysql数据库实现分页查询任务

通过mysql数据库提供的分页机制,实现商品信息的分页查询功能,将查询到的信息显示到jsp页面上。

本项目时一个简单的运用eclipse+jdbc+mysql的小程序。

连接的数据库名称为db_database11,属性如下:

1.创建名为com.pmf.bean的包,包中是名为Product的类,用于封装商品信息。

全部代码如下:

package com.pmf.bean;

/**

* 商品

*

*/

public class Product {

public static final int PAGE_SIZE = 2;

// 编号

private int id;

// 名称

private String name;

// 价格

private double price;

// 数量

private int num;

// 单位

private String unit;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public double getPrice() {

return price;

}

public void setPrice(double price) {

this.price = price;

}

public int getNum() {

return num;

}

public void setNum(int num) {

this.num = num;

}

public String getUnit() {

return unit;

}

public void setUnit(String unit) {

this.unit = unit;

}

}

2.创建名为“BookDao”的类,主要用于封装商品数据库的相关操作。在BookDao类中首先编写getConnection()方法,用于创建Connection对象。接着创建商品信息的分页查询方法find(),其中page参数用于传递要查询的页码。在分页查询过程中还需要获取信息的总记录数,用于计算商品信息的总页数。此方法写在findCount()方法中。

代码如下:

package com.pmf.bean;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.List;

/**

* 商品数据库操作

*

*/

public class BookDao {

/**

* 获取数据库连接

* @return Connection对象

*/

public Connection getConnection(){

// 数据库连接

Connection conn = null;

try {

// 加载数据库驱动,注册到驱动管理器

Class.forName("com.mysql.jdbc.Driver");

// 数据库连接字符串

String url = "jdbc:mysql://localhost:3306/db_database11";

// 数据库用户名

String username = "root";

// 数据库密码

String password = "123123";

// 创建Connection连接

conn = DriverManager.getConnection(url,username,password);

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

// 返回数据库连接

return conn;

}

/**

* 分页查询所有商品信息

* @param page 页数

* @return List<Product>

*/

public List<Product> find(int page){

// 创建List

List<Product> list = new ArrayList<Product>();

// 获取数据库连接

Connection conn = getConnection();

// 分页查询的SQL语句

String sql = "select * from tb_product order by id desc limit ?,?";

try {

// 获取PreparedStatement

PreparedStatement ps = conn.prepareStatement(sql);

// 对SQL语句中的第1个参数赋值

ps.setInt(1, (page - 1) * Product.PAGE_SIZE);

// 对SQL语句中的第2个参数赋值

ps.setInt(2, Product.PAGE_SIZE);

// 执行查询操作

ResultSet rs = ps.executeQuery();

// 光标向后移动,并判断是否有效

while(rs.next()){

// 实例化Product

Product p = new Product();

// 对id属性赋值

p.setId(rs.getInt("id"));

// 对name属性赋值

p.setName(rs.getString("name"));

// 对num属性赋值

p.setNum(rs.getInt("num"));

// 对price属性赋值

p.setPrice(rs.getDouble("price"));

// 对unit属性赋值

p.setUnit(rs.getString("unit"));

// 将Product添加到List集合中

list.add(p);

}

// 关闭ResultSet

rs.close();

// 关闭PreparedStatement

ps.close();

// 关闭Connection

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

return list;

}

/**

* 查询总记录数

* @return 总记录数

*/

public int findCount(){

// 总记录数

int count = 0;

// 获取数据库连接

Connection conn = getConnection();

// 查询总记录数SQL语句

String sql = "select count(*) from tb_product";

try {

// 创建Statement

Statement stmt = conn.createStatement();

// 查询并获取ResultSet

ResultSet rs = stmt.executeQuery(sql);

// 光标向后移动,并判断是否有效

if(rs.next()){

// 对总记录数赋值

count = rs.getInt(1);

}

// 关闭ResultSet

rs.close();

// 关闭Connection

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

// 返回总记录数

return count;

}

}

3.创建一个名为“FindServlet”的类位于com.pmf.servlet中。此类是分页查询商品信息的Servlet对象。在该类中写doGet()方法处理分页请求。

代码如下:

package com.pmf.servlet;

import java.io.IOException;

import java.util.List;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.pmf.bean.Product;

import com.pmf.bean.BookDao;

/**

* Servlet implementation class FindServlet

*/

public class FindServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

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

BookDao dao = new BookDao();

// 查询所有商品信息

List<Product> list = dao.find(currPage);

// 将list放置到request之中

request.setAttribute("list", list);

// 总页数

int pages ;

// 查询总记录数

int count = dao.findCount();

// 计算总页数

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

// 对总页数赋值

pages = count / Product.PAGE_SIZE;

}else{

// 对总页数赋值

pages = count / Product.PAGE_SIZE + 1;

}

// 实例化StringBuffer

StringBuffer sb = new StringBuffer();

// 通过循环构建分页条

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

// 判断是否为当前页

if(i == currPage){

// 构建分页条

sb.append("『" + i + "』");

}else{

// 构建分页条

sb.append("<a href='FindServlet?page=" + i + "'>" + i + "</a>");

}

// 构建分页条

sb.append(" ");

}

// 将分页条的字符串放置到request之中

request.setAttribute("bar", sb.toString());

// 转发到product_list.jsp页面

request.getRequestDispatcher("product_list.jsp").forward(request, response);

}

}

4.创建product_list.jsp页面,此页面通过获取查询结果List与分页条来分页显示商品的数据。

代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@page import="java.util.List"%>

<%@page import="com.pmf.bean.Product"%><html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>所有商品信息</title>

<style type="text/css">

td{font-size: 12px;}

h2{margin: 0px}

</style>

</head>

<body>

<table align="center" width="450" border="1" height="180" bordercolor="white" bgcolor="black" cellpadding="1" cellspacing="1">

<tr bgcolor="white">

<td align="center" colspan="5">

<h2>所有商品信息</h2>

</td>

</tr>

<tr align="center" bgcolor="#e1ffc1" >

<td><b>ID</b></td>

<td><b>商品名称</b></td>

<td><b>价格</b></td>

<td><b>数量</b></td>

<td><b>单位</b></td>

</tr>

<%

List<Product> list = (List<Product>)request.getAttribute("list");

for(Product p : list){

%>

<tr align="center" bgcolor="white">

<td><%=p.getId()%></td>

<td><%=p.getName()%></td>

<td><%=p.getPrice()%></td>

<td><%=p.getNum()%></td>

<td><%=p.getUnit()%></td>

</tr>

<%

}

%>

<tr>

<td align="center" colspan="5" bgcolor="white">

<%=request.getAttribute("bar")%>

</td>

</tr>

</table>

</body>

</html>

5.编写程序中的主页index.jsp,在其中编写分页查询商品信息的超链接指向FindServlet.

代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<a href="FindServlet">查看所有商品信息</a>

</body>

</html>

 

分页查询信息(使用jdbc连接mysql数据库实现分页查询任务)的更多相关文章

  1. 我的第五个程序 java的JDBC连接mysql数据库 实现输入查询

    import java.sql.*; import java.util.Scanner; public class JDBCTest { public static void main(String[ ...

  2. JDBC连接MySQL数据库代码模板

    下面这个例子是最简单的JDBC连接MySQL数据库的例子. 一般步骤: 1.注册驱动: 2.建立连接: 3.创建语句: 4.处理结果: 5.释放资源. 注意: 1.软件开发环境:MyEclipse 8 ...

  3. JDBC——使用JDBC连接MySQL数据库

    在JDBC--什么是JDBC一文中我们已经介绍了JDBC的基本原理. 这篇文章我们聊聊如何使用JDBC连接MySQL数据库. 一.基本操作 首先我们需要一个数据库和一张表: CREATE DATABA ...

  4. ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库

    1.MySQL存储过程   1.1.什么是存储过程 带有逻辑的sql语句:带有流程控制语句(if  while)等等 的sql语句   1.2.存储过程的特点 1)执行效率非常快,存储过程是数据库的服 ...

  5. java jdbc 连接mysql数据库 实现增删改查

    好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...

  6. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  7. JDBC连接MySQL数据库及示例

      JDBC是Sun公司制定的一个可以用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一 ...

  8. java用JDBC连接MySQL数据库的详细知识点

    想实现java用JDBC连接MySQL数据库.需要有几个准备工作: 1.下载Connector/J的库文件,下载Connector/J的官网地址:http://www.mysql.com/downlo ...

  9. JDBC 连接Oracle 数据库,JDBC 连接Mysql 数据库

    首先是JDBC 连接Oracle  数据库 package com.util; import com.pojo.UserInfo; import java.sql.*; public class DB ...

随机推荐

  1. Java中常用的字节流和字符流

    IO流(输入流.输出流) 字节流.字符流 1.字节流: InputStream.OutputStream InputStream抽象了应用程序读取数据的方式: OutputStream抽象了应用程序写 ...

  2. ccf-20160903--炉石传说

    本题思路如下图: 题目和代码如下: 问题描述 试题编号: 201609-3 试题名称: 炉石传说 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 <炉石传说:魔兽英雄传& ...

  3. ccf-20170303--Markdown

    我的想法如下图: 代码和题目如下: 问题描述 试题编号: 201703-3 试题名称: Markdown 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 Markdown 是一 ...

  4. 阿里八八β阶段Scrum(3/5)

    今日进度 叶文滔: 添加了侧边栏调用数据库用户名的功能,因为对Navigation View的不熟悉,走了很多弯路,尝试了三种方法才成功调用. 俞鋆: 研究了几个图像识别的api,最终决定使用ocr. ...

  5. esp8266(1) 手机+Arduino+esp8266通信

    ESP8266 Android与Arduino通信 功能描述: 1 Arduino上电,它通过软串口(Arduino的 2号和3号脚)发送命令,配置espson8266为 AP模式,wifi名 DDD ...

  6. <操作系统>进程和线程

    进程 定义: 一个正在执行的程序: 一个正在计算机上执行的程序实例; 能分配给处理器并由处理器执行的实体: 一个由一组执行指令,一个当前状态和一组相关的系统资源表征的活动单元. 进程的基本元素:程序代 ...

  7. PAT A1033 To Fill or Not to Fill (25 分)——贪心

    With highways available, driving a car from Hangzhou to any other city is easy. But since the tank c ...

  8. JAVA 8的新特性

    1.Lambda表达式:允许把函数作为一个方法的参数 Lambda的优点: 1)简洁 2)非常容易并行计算 3)可能代表未来编程趋势 Lambda的缺点: 1)若不要并行计算,很多时候计算速度没有传统 ...

  9. Luogu4630 APIO2018 Duathlon 圆方树、树形DP

    传送门 要求的是一条按顺序经过\(s,t,c\)三个点的简单路径.简单路径的计数问题不难想到点双联通分量,进而使用圆方树进行求解. 首先将原图缩点,对于一个大小为\(size\)的点双联通分量内,在这 ...

  10. JQuery将form表单值转换成json字符串函数

    由于后台接口限定,必须要将表单内容转换成json字符串提交,因此写了一个将form表单值转成json字符串的函数.     前提:页面引入了JQuery          下面直接上代码 一.代码 / ...