第14章WEB14-JDBC案例篇
今日任务
Ø 使用JDBC技术完成对商品的添加修改查询及分页的操作
教学导航
教学目标
掌握JDBC的CRUD的操作
掌握JDBC的分页操作
教学方法
案例驱动法
1.1 上次课内容回顾:
JSP的模式:
- JSP的设计模式:
- JSP的模式一:JSP + JavaBean设计模式:
- JSP的模式二:JSP + Servlet + JavaBean设计模式:MVC设计模式.
- M:Model
- V:View
- C:Controller
- MVC和EE开发三层结构的关系:
- 反射:(*****)
- 获得类的字节码对象:Class对象.三种获得的方式.
- 类名.class;
- 类的实例.getClass();
- Class.forName();
- 获得构造器:Constructor
- 获得属性:Field
- 获得方法:Method
JDBC的事务管理:
- 获得类的字节码对象:Class对象.三种获得的方式.
- 事务的概念:指的是逻辑上的一组操作,要么一起成功,要么一起失败.
- 事务的特性:
- 原子性:事务的不可分割
- 一致性:事务执行的前后,数据完整性保持一致.
- 隔离性:一个事务的执行不应该受到另一个事务的干扰
- 持久性:事务一旦结束,将会永久修改到数据库.
- 如果不考虑隔离性:
- 脏读 :一个事务读到另一个未提交的数据.
- 不可重复读 :一个事务读到另一个事务已经提交的update的数据,导致多次的查询结果不一致.
- 虚读 :一个事务读到另一个事务已经提交的insert的数据,导致多次的查询结果不一致.
- 解决读问题:
- 未提交读:以上情况都能发生.
- 已提交读:解决脏读,但是不可重复读和虚读有可能发生
- 重复读:解决脏读和不可重复读,但是虚读有可能发生.
- 串行化:可以解决以上的所有情况.
- JDBC进行事务的管理:
- Connection:
- setAutoCommit(boolean flag);
- commit();
- rollback();
- Connection:
- DBUtils进行的事务的管理:
1.2 完成对商品的CRUD的操作,进行条件查询,分页查询.1.2.1 需求:
购物的网站中需要显示商品的信息,在商品信息的显示中,如果商品的信息比较多.需要将比较多的商品进行分页的显示.进行条件查询.同时对商品进行修改,插入,删除.
1.2.2 分析:1.2.2.1 技术分析:
使用MVC设计模式JSP + Servlet + JavaBean + JDBC实现商品信息的CRUD的操作.
1.2.2.2 步骤分析:
【步骤一】:创建数据库和表
- create database web_14;
- use web_14;
- create table
product
(
pid
varchar (96),
pname
varchar (150),
market_price
double ,
shop_price
double ,
pimage
varchar (600),
pdate
date ,
is_hot
double ,
pdesc
varchar (765),
pflag
double ,
cid
varchar (96)
);
【步骤二】:创建工程导入jar包. - msysql驱动
- c3p0的包
- dbutils的包
- beanUtils的包:两个.
- JSTL的包:两个
【步骤三】:创建包结构.
【步骤四】:创建一个首页:
<h1>欢迎来到商品信息管理平台</h1>
<h3><a href="${ pageContext.request.contextPath }/ProductFindAllServlet">查询所有商品</a></h3>
1.2.3 代码实现:1.2.3.1 商品的查询的功能:
在首页上点击【查询所有商品】链接:
提交到Servlet中:- 调用业务层-->调用DAO:
- 将商品列表保存到request域中:
- 转发到商品列表页面:
在商品列表的页面中显示商品:
1.2.3.2 商品的添加的功能:
在首页点击【添加】链接:跳转到添加页面.
在添加页面中输入信息:点击【提交】提交到Servlet
在Servlet中: - 接收数据:
- 封装数据:
- 调用业务层:
- 页面跳转
- 重复提交的问题:
- 添加完商品之后,转发到一个页面,刷新该页面.
- 网速很慢,点击提交的按钮,其实已经在提交了但是网速慢,不停的点击提交.
- 解决重复提交的根本解决办法:令牌机制(一次性).
- 生成随机的令牌保存在session中.
- 在表单的提交的时候,将随机的令牌放入到表单的隐藏字段中.
- 在Servlet中获得session中和表单中的令牌是否一致.
- 如果一致执行插入操作,不一致跳转到其他页面.将令牌销毁.
- 代码实现:
// 判断是否是重复提交:
String token1 = (String)request.getSession().getAttribute("token");
String token2 = request.getParameter("token");
// 清空session中的令牌:
request.getSession().removeAttribute("token");
if(!token2.equals(token1)){
request.setAttribute("msg", "亲!您已经提交过!请不要重复提交了!");
request.getRequestDispatcher("/jsp/msg.jsp").forward(request, response);
return;
}
1.2.3.3 商品的信息的修改:
在列表页面上点击【修改】链接:
提交到Servlet:根据id查询该商品.将商品的信息显示到修改页面:
在修改的页面上修改数据,点击【提交】按钮:
提交到Servlet:完成商品信息的修改:
1.2.3.4 商品的信息的删除:
在列表页面上点击【删除】链接:
提交到Servlet:
调用业务层完成删除的操作:
***** 扩展删除多条记录:
1.2.3.5 商品模糊查询:
1.2.3.6 商品分页显示:
分页条: 【首页】【上一页】[1][2][3][4]【下一页】【尾页】
分页功能的实现: - 物理分页:一次只查10条记录,点击下一页,再去查询后10条.使用SQL语句进行控制的分页.
- 缺点:经常需要和数据库交互.
- 优点:数据量特别大,不会导致内存的溢出.
- 逻辑分页:一次性将所有数据全都查询出来,根据需要进行截取.List集合进行控制. subList();
- 缺点:数据量如果特别大,容易导致内存溢出.
- 优点:与数据库交互次数少.
- 不同的数据库对分页的语句也是不一样的:
- MYSQL进行分页: 使用limit关键字.
- select * from xxx where .. Group by ... Having ... Order by ... limit a,b; -- a:从哪开始 b:查询的记录数.
- 根据页数计算 limit后面的两个参数:
- currPage begin pageSize
1 0 10
2 10 10
3 20 10 - begin = (currPage - 1) * pageSize;
- currPage begin pageSize
- 参数的传递:
- 前台--->后台:currPage
- 后台--->前台:currPage,totalPage(总页数),totalCount(总记录数),pageSize,List集合.
- 使用JavaBean封装参数:
- 后台--->前台:传递一个JavaBean就可以.
- Oracle进行分页: 使用SQL语句嵌套.
- SQL Server数据库进行分页: 使用 top 关键字.
- MYSQL进行分页: 使用limit关键字.
- 在首页上添加一个分页查询的链接:
转载于:https://blog.51cto.com/13587708/2102936
第14章WEB14-JDBC案例篇相关推荐
- 《利用Python进行数据分析·第2版》第14章 数据分析案例
第 1 章 准备工作第 2 章 Python 语法基础,IPython 和 Jupyter 第 3 章 Python 的数据结构.函数和文件 第 4 章 NumPy 基础:数组和矢量计算 第 5 章 ...
- 《MATLAB智能算法30个案例》:第14章 基于粒子群算法的PID控制器优化设计
<MATLAB智能算法30个案例>:第14章 基于粒子群算法的PID控制器优化设计 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB智能算法30个案例 ...
- MySQL基础篇-第14章_视图
第14章_视图 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 常见的数据库对象 对象 描述 表(TABLE) 表是存储数据的逻辑单元,以行和列的形 ...
- 第14章_视图(基础篇)
第14章_视图 1. 常见的数据库对象 2. 视图概述 2.1 为什么使用视图? 2.2 视图的理解 3. 创建视图 3.1 创建单表视图 3.2 创建多表联合视图 3.3 基于视图创建视图 4. 查 ...
- 【书评:Oracle查询优化改写】第14章 结尾章
[书评:Oracle查询优化改写]第14章 结尾章 一.1 相关参考文章链接 前13章的链接参考相关连接: [书评:Oracle查询优化改写]第一章 http://blog.itpub.net/26 ...
- 第五章-Linux实操篇
title: 第五章 Linux实操篇 categories: Linux tags: linux typora-root-url: - abbrlink: 93414991 date: 2019-0 ...
- Shader案例篇二《镜子2》
Shader案例篇二<镜子2> 二.Unity中制作原理 1.简单说明:其实这个原理就是用一个摄像机去拍镜子上面的物体将得到的图像投影给Plane,最后主摄像机就能看到Plane上物体的镜 ...
- [Python从零到壹] 六十.图像识别及经典案例篇之基于阈值及边缘检测的图像分割
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- 学籍管理系统 c语言流程图,程序设计基础 ——C语言第10章 综合应用案例——学生学籍管理系统...
程序设计基础 第 10章 综合应用 案例 -学生学籍 管理系统 1 详细设计 需求分析 总体设计 第 10章 综合应用 案例 -学生学籍管理系统 编码实现 运行结果 2 设计一个利用 文件 处理方式, ...
- 【Spring实战】—— 14 传统的JDBC实现的DAO插入和读取
从这篇开始学习Spring的JDBC,为了了解Spring对于JDBC的作用,先通过JDBC传统的流程,实现一个数据库的插入和读取. 从这篇你可以了解到: 1 传统的JDBC插入和读取的过程. 2 如 ...
最新文章
- 剑指offer:面试题24. 反转链表
- 2021春季学期-创新设计与实践-Lesson6
- 【英语】英语学习之道
- xpath和css selector
- java中的math.abs_Java.math.BigDecimal.abs()方法
- [转帖]Mootools源码分析-02 -- Utils
- python打印字节流_java打印流的输出使用
- css实现强制不换行/自动换行/强制换行
- 预测数据时数据类型是object导致报错TypeError: unsupported operand type(s) for -: ‘str‘ and ‘float‘
- 百度Apollo赋能的威马W6,自主泊车体验如何?
- pytorch查看模型weight与grad
- 2021-08-04 Mysql自连接
- 计算机组成原理--Cache主存地址映射 ---课后题4.8
- 多媒体视频处理工具FFmpeg的简介及安装
- 小学期破防:BIT计科大二小学期的个人见解以及建议
- Qt多人协作项目执行方案
- 云计算 | Gartner最新IaaS魔力象限详读
- 万维网互联网计算机网络的区别,万维网和互联网的区别_互联网、万维网、因特网之间有什么区别...
- jdk1.7安装详细过程
- 1455: C语言实验题――数字串求和
热门文章
- 从零开始一步一步搭建Ubuntu Server服务器、修改数据源、安装Docker、配置镜像加速器、Compose部署Gitlab服务
- Tomcat下server.xml怎样处理图片多路径映射问题
- 【Python】list 之 extend 和 append 的区别
- 用Scikit-learn和TensorFlow进行机器学习(二)
- linux中mfsort用法,Linux命令――sort
- 华硕h410csm怎么开启_主板BIOS中的launch CSM选项灰色无法更改的解决方法
- 玩转用户标签体系,打造精细化运营底层能力 | 芒种训练营第一课
- USACO翻译:USACO 2014 DEC Silver三题
- Ribbon之ServerList
- Android线程间通信之handler