代码仓库+文档:https://gitee.com/DerekAndroid/ServletJDBCSearchPage.git

效果:

分析:

批量删除

搜索

具体思路:

1.批量删除商品需求:根据数据前面的复选框选中情况,批量删除选中的数据步骤分析:1.拷贝day17  修改web2.为表头和列表加上复选框,加上删除勾选的按钮3.使用jquery实现全选全不选的功能//导入jquery.js文件//派发单击事件//获取表头复选框的选中状态//获取列表中所有复选框对象//使列表中复选框状态和表头复选框状态保持一致4.为列表复选框添加name属性和value  外面嵌套一个form表单  在点击删除勾选的时候派发一个click事件,让事件方法拥有提交form表单的功能5.servlet的操作//获取前台传递的id数组//调用service6.service操作//开启事物//遍历数组//调用dao删除//提交事物//出现异常,回滚事物7.dao操作//获取QueryRunner对象//编写sql//执行sql(手动获取连接)2.模糊查询需求:在列表页面有按照名称和关键字查询的两个输入框,输入查询信息后,点击搜索按钮,那么在下面的列表中会显示出符合条件的数据select * from product where pname like ? and pdesc like ?select * from product where pname like ?select * from product where pdesc like ?select * from productStringBuffer sb = new StringBuffer("select * from where 1=1");//判断输入的搜索项是否为“”if(name!=""){sb.append( and pname like ?)}if(kw!=""){sb.append( and pdesc like ?)}3.分页需求:针对于从数据库查询的多条数据,展示在一个页面上  分页数展示作用:提高用户的体验度物理分页:用户需要看那一页的数据,那么就从数据库中查询出来当页的数据逻辑分页:把数据库中的所有数据查询出来,保存到内存中,当用户需要看某一页的数据的时候,直接从内存中读取mysql数据库分页:limit n,m  (n是查询的索引,m查询几个)第一页: 0 3第二页: 3 3第三页: 6 3第n页:  (当前页-1)*m ,m分页需要的数据:1.页面展示的内容    select * from product limit (当前页-1)*m ,m2.每页显示的条数    自己规定3.当前页            从前台传递过去4.总条数            select count(*) from product  5.总页数            总条数/每页显示的条数  向上取整后台实现:封装为PageBean1.List list;   //页面展示的内容 select * from product limit (pageNumber-1)*pageSize ,pageSize2.int pageSize;  //每页显示的条数    自己规定3.int pageNumber  //当前页            从前台传递过去4.int pageCount   //总条数 select count(*) from product 5.int pageTotle   //总页数     (int)Math.ceil(pageCount*1.0/pageSize)前台实现:[上一页]1 2 3 4 5 6 7[下一页]  第几页/共几页

sql表

CREATE DATABASE day17;
USE day17;
CREATE TABLE `product` (`pid` VARCHAR (96),`pname` VARCHAR (150),`market_price` DOUBLE ,`shop_price` DOUBLE ,`pimage` VARCHAR (600),`pdate` DATE ,`pdesc` VARCHAR (765)
);
INSERT INTO `product` VALUES('1','小米 4c 标准版','1399','1299','products/1/c_0001.jpg','2015-11-02','小米 4c 标准版 全网通 白色 移动联通电信4G手机 双卡双待');
INSERT INTO `product` VALUES('10','华为 Ascend Mate7','2699','2599','products/1/c_0010.jpg','2015-11-02','华为 Ascend Mate7 月光银 移动4G手机 双卡双待双通6英寸高清大屏,纤薄机身,智能超八核,按压式指纹识别!!选择下方“移动老用户4G飞享合约”,无需换号,还有话费每月返还!');
INSERT INTO `product`  VALUES('11','vivo X5Pro','2399','2298','products/1/c_0014.jpg','2015-11-02','移动联通双4G手机 3G运存版 极光白【购机送蓝牙耳机+蓝牙自拍杆】新升级3G运行内存·双2.5D弧面玻璃·眼球识别技术');
INSERT INTO `product`  VALUES('12','努比亚(nubia)My 布拉格','1899','1799','products/1/c_0013.jpg','2015-11-02','努比亚(nubia)My 布拉格 银白 移动联通4G手机 双卡双待【嗨11,下单立减100】金属机身,快速充电!布拉格相机全新体验!');
INSERT INTO `product`  VALUES('13','华为 麦芒4','2599','2499','products/1/c_0012.jpg','2015-11-02','华为 麦芒4 晨曦金 全网通版4G手机 双卡双待金属机身 2.5D弧面屏 指纹解锁 光学防抖');
INSERT INTO `product`  VALUES('14','vivo X5M','1899','1799','products/1/c_0011.jpg','2015-11-02','vivo X5M 移动4G手机 双卡双待 香槟金【购机送蓝牙耳机+蓝牙自拍杆】5.0英寸大屏显示·八核双卡双待·Hi-Fi移动KTV');
INSERT INTO `product`  VALUES('15','Apple iPhone 6 (A1586)','4399','4288','products/1/c_0015.jpg','2015-11-02','Apple iPhone 6 (A1586) 16GB 金色 移动联通电信4G手机长期省才是真的省!点击购机送费版,月月送话费,月月享优惠,畅享4G网络,就在联通4G!');

数据库操作Dao-ProductDao

package com.itheima.dao;import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;import com.itheima.bean.PageBean;
import com.itheima.bean.Product;
import com.itheima.utils.DataSourceUtils;public class ProductDao {/*** 查询所有商品* @return* @throws SQLException */public List<Product> findAll() throws SQLException {//创建QueryRunnerQueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());//编写sqlString sql = "select * from product";//执行sqlList<Product> query = qr.query(sql, new BeanListHandler<Product>(Product.class));return query;}/**添加商品 */public void saveProduct(Product pro) throws SQLException {QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());String sql = "insert into product values(?,?,?,?,?,?,?)";qr.update(sql, pro.getPid(),pro.getPname(),pro.getMarket_price(),pro.getShop_price(),pro.getPimage(),pro.getPdate(),pro.getPdesc());}/*** 根据id查询数据* @param id* @return* @throws SQLException */public Product getProByPid(String id) throws SQLException {QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());String sql = "select * from product where pid=?";Product query = qr.query(sql, new BeanHandler<Product>(Product.class), id);return query;}/*** 根据id修改商品* @param pro* @throws SQLException */public void updatePro(Product pro) throws SQLException {QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());String sql = "update product set pname=?,market_price=?,shop_price=?,pdesc=? where pid=?";qr.update(sql, pro.getPname(),pro.getMarket_price(),pro.getShop_price(),pro.getPdesc(),pro.getPid());}/*** 根据id删除商品信息* @param pid* @throws SQLException */public void deletePro(String pid) throws SQLException {QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());String sql = "delete from product where pid = ?";qr.update(sql, pid);}/*** 批量删除* @param id* @throws SQLException */public void delCheck(String id) throws SQLException {//创建QueryRunner对象(不带参数)QueryRunner qr = new QueryRunner();//编写sqlString sql = "delete from product where pid = ?";//执行sql(手动获取连接)qr.update(DataSourceUtils.getConnection(), sql, id);}/*** 模糊查询* @param name* @param kw* @return* @throws SQLException */public List<Product> search(String name, String kw) throws SQLException {QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());StringBuilder sb = new StringBuilder("select * from product where 1=1");List<String> list  = new ArrayList<>();System.out.println(name+kw);if(name!=""){sb.append(" and pname like ?");list.add("%"+name+"%");}if(kw!=""){sb.append(" and pdesc like ?");list.add("%"+kw+"%");}List<Product> query = qr.query(sb.toString(), new BeanListHandler<Product>(Product.class), list.toArray());return query;}/*** 获取需要显示的数据* @param pb* @return* @throws SQLException*/public List<Product> getList(PageBean<Product> pb) throws SQLException {// TODO Auto-generated method stubQueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());String sql = "select * from product limit ?,?";List<Product> query = qr.query(sql, new BeanListHandler<Product>(Product.class), pb.getIndex(),pb.getPageSize());return query;}/*** 获取总条数* @return* @throws SQLException */public int getPageCount() throws SQLException {QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());String sql = "select count(*) from product";int intValue = ((Long)qr.query(sql,new ScalarHandler())).intValue();return intValue;}}

分页业务bean

package com.itheima.bean;import java.util.List;public class PageBean<T> {List<T> list;   //页面展示的内容 select * from product limit (pageNumber-1)*pageSize ,pageSizeprivate int pageSize;  //每页显示的条数    自己规定private int pageNumber;  //当前页            从前台传递过去private int pageCount;   //总条数 select count(*) from product private int pageTotle;   //总页数     (int)Math.ceil(pageCount*1.0/pageSize)public List<T> getList() {return list;}public void setList(List<T> list) {this.list = list;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getPageNumber() {return pageNumber;}public void setPageNumber(int pageNumber) {this.pageNumber = pageNumber;}public int getPageCount() {return pageCount;}public void setPageCount(int pageCount) {this.pageCount = pageCount;}public void setPageTotle(int pageTotle) {this.pageTotle = pageTotle;}//获取总页数public int getPageTotle() {return (int)Math.ceil(pageCount*1.0/pageSize);}//获取数据索引public int getIndex(){return (pageNumber-1)*pageSize;}//定义构造public PageBean(int pageSize, int pageNumber) {super();this.pageSize = pageSize;this.pageNumber = pageNumber;}}

Servlet+JDBC+搜索+分页相关推荐

  1. Java项目:小蜜蜂扩音器网上商城系统(java+JSP+Servlet+JDBC+Ajax+mysql)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 用户功能模块: 用户注册: 用户登录:商品模块:订单模块:后台管理系统功能:管理员模块: 商品模块:订单管理模块 : 二.项目 ...

  2. ExtJs 备忘录(6)—— GirdPanl表格(二) [ 搜索分页 ]

    前言 近些天对于厚积薄发有深刻的理解,尤其是月末那两天,很想再写两篇文章,保持每周一篇--每月至少四篇以上的文章.写文章分两种情况:一种情况是已经积累了许多经验,写起来轻松且得心应手,内容和系列文章容 ...

  3. SAP UI 搜索分页技术

    搜索分页技术往往和另一个术语Lazy Loading(懒加载)联系起来.今天由Jerry首先介绍S/4HANA,CRM Fiori和S4CRM应用里的UI搜索分页的实现原理.后半部分由SAP成都研究院 ...

  4. S/4HANA和CRM Fiori应用的搜索分页实现

    在我的博客Paging Implementation in S/4HANA for Customer Management 我介绍了S/4HANA for Customer Management里采用 ...

  5. jsp mysql servlet_JSP+Servlet+JDBC+mysql实现的学生成绩管理系统

    本系统基于JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的学生成绩管理系统.涉及技术少,易于理解,适合JavaWeb初学者学习使用. 难度等级:入门 技术栈 编辑器 Ec ...

  6. jquery插件dataTables(dataTables在显示表格的时候,果然是个好东西,支持排序/搜索/分页/...)

    jquery插件dataTables dataTables在显示表格的时候,支持排序/搜索/分页/... 官网:http://www.datatables.net/ demo: [javascript ...

  7. oracle游标多线程,多线程jdbc游标分页查询原理 oracle和mysql分页

    分页查询中如何使用多线程加快处理速度? 分页sql是拼起来的现在怎么优化可以提高展示速度:优化思路: 1.试试并发多线程访问,然后把多线程获取的结果合并在一起. 2.做索引,加快查询速度. 3.把经常 ...

  8. layui 数据表格的搜索分页功能的实现

    最近在使用layui+larave做项目,需要使用到table的分页+搜索的功能,一开始没有什么思路,从网上找了几个,用在自己这里并不正确,不知是自己有哪里写错了,还是这几个是不正确,下面是自己亲自试 ...

  9. 支持增删查改的简单Java Web通讯录详细教程【基于Mac OS+IDEA+Servlet+JDBC+Tomcat】

    本文将以Web版通讯录的形式介绍一个支持简单增删查改的Java Web项目,软硬件环境基于Macbook Air M2+macOS Ventura 13.1+IntelliJ IDEA 2022,技术 ...

最新文章

  1. 0627 - 不能再靠功能取胜
  2. 文件服务器的迁移(包括权限)
  3. 【转】BI 入门: 体系架构及相关技术
  4. Excel导入MS SQL SERVER 操作
  5. java.lang.IllegalArgumentException: invalid comparison: java.time.LocalDateTime and java.lang.String
  6. android 半透明色值_Android 色值转换成透明度色值
  7. PostgreSQL 在Ubuntu下如何修改postgres默认密码
  8. Newtonsoft.Json.JsonConvert.DeserializeObject首次转换太慢问题
  9. 《数字电子技术基础》4.3 若干常用的组合逻辑电路 学习笔记
  10. 2022高压电工操作证考试题库及模拟考试
  11. matlab fvtool 滤波器频响
  12. 【HTML】简单的表格设计
  13. 【Java入门练习100例】03.短路与和逻辑与的区别——老实人和机灵鬼
  14. R语言ggplot2 | 如何自定义facet分面的坐标轴范围
  15. 单片机中SDZ是什么意思_单片机里sp是什么意思啊
  16. 区块链软件公司:区块链赚钱的领域有哪些
  17. 【linux】运行run文件显示cannot execute binary file
  18. ASp.net判断文件或文件夹是否存在
  19. 谷歌 ARCore 就是低配版 Tango,它比苹果 ARKit 好在哪?
  20. 软件测试V模型和W模型的区别

热门文章

  1. 华为鸿蒙系统操作教程_华为鸿蒙系统好用吗 华为鸿蒙系统有什么优缺点
  2. jquery 选择兄弟节点
  3. js实现页面滚动切换导航栏/点击导航栏跳转到指定位置
  4. 一文辨明QPS、TPS、PV、UV、DAU、MAU、并发用户数、吞吐量~
  5. mysql查询结果横向显示出来_SQL查询结果横向显示
  6. 大数据运维之MySQL备份及恢复
  7. 搜索引擎学习资料收集
  8. FullCalendar增加节气、节日和农历显示
  9. Dear Friends
  10. 小值域指数级选择空间换时间