Java代码操纵数据库中数据
思路:从数据库中读出list – list放进作用域 转发到页面 携带数据到页面
1. 要使用数据:导入mysql的jar包
1.1 引入mydql包
访问数据库要引mysql的jar包
1.2 web目录配置
1. 在web目录的WEB-INF目录中建一个lib目录
不然加载了包,但是包编译不过去:找不到包
2. 导入使用的jar包
(Mean之后就不用这样做了)
复制jar包
1.3 out编译/开发目录
删掉重新生成
*报错:500
- 500:java代码出错
- connection出错:只有一种情况,数据库没有连接上
解决:web目录少加东西了+重新生成out目录
2. 项目结构
新建util包、 pojo包
3. 封装JdbcUnit
- 加载驱动
- 创建连接
- close函数
- 查询函数:给问号赋值、获取rs(建对象、获取属性列表、循环属性赋值,将对象加入list)、关闭流
4. 调用JdbcUnit 读数据
- 调用查结果,放入作用域
- 跳转到jsp页面
- 读数据
- 用表格显示
读数据代码:
list.jsp:
${grads}}
5. 用表格显示结果 JSTL
JSTL:是标签库,提供了很多自定义标签。(不用jsp标签,用jstl)
5.1 导入jstl的jar包
(1)web目录配置
复制jar包
导入web中的lib目录
(2)导包
(3)检查out目录在没有吗,没有–删除重新编译
5.2 用法
5.3 效果
(1)显示数据库中的数据
(2)根据实际情况显示数据 c:if
根据数据库中的值让数据对应其他显示形式,eg 1表示男 0表示女
6. JSTL笔记
jstl是一套自定义的标签 用于实现jsp中的业务逻辑
6.1使用方式
- 引入jstl jar包
- 在哪个jsp中使用就要在其中增加 头部指令
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
6.2常用标签
- 循环标签 c:forEach 类似增强for循环
<c:forEach items="要循环的集合或数组" var="循环变量"></c:forEach>
itmes必须是一个el表达式,取到的值必须是集合或数组。(jsp通过作用域得到集合,jsp本身没有集合)
var可以自己起名字
- 条件标签 c:if
<c:if test="条件">结果</c:if>
c:if 没有else
<td>
<c:if test="${student.sex == 1}">男</c:if>
<c:if test="${student.sex == 0}">女</c:if>
</td>
7. 修改数据
7.1 添加数据
点添加链接–》跳转到添加界面上
goAdd
doAdd
- jsp:
在点击保存的那一刻,接到输入的内容并将数据保存到数据库中
点保存时无法在此页面操作,要交给另一个Servlet处理- 如何交给另一个servlet:
- 给表单增加action属性 :action表示 在点击提交的时候把表单信息提交给哪个servlet,也是用地址来控制
- 按钮的type设为submit:一点 把表单里的数据提交到action指定的servlet下
- 如何交给另一个servlet:
- Servlet:
1.接收表单中所有数据 form表单中所有输入框
2.保存到数据库中
3.转发到列表页
- 接收表单中所有数据 form表单中所有输入框
传递问题:表单数据正常接不到,
解决:给input一个name属性,名字可以随便取;通过servlet的request.getParameter(“要接收表单的name值”)doAdd - Servlet中: String name = request.getParameter("name");//传要接的是哪个表单 传要接的表单的name值
get请求
post请求
发送请求后,地址不变
- doAdd Servlet:
- 保存到数据库中
先封装JdbcUnit 的增删改函数
doAdd 的 servlet调用 - 转到列表页
-
用转发出错
点击保存 跳转到doAdd的servlet中 doAdd跳转到list页面,但是list页面没有数据。
- 原因:
list为什么显示数据(查询,作用域、转发):在list的servlet中 查询结果并将结果放入作用域,携带到list的jsp中;这样才有了grade的数据
在这里,只是转发过去,但是并没有查询数据、放入作用域。
不能在转发前增加查询代码:用转发地址栏不变,每次刷新都是doAdd的地址,每次刷新doAdd的servlet都会添加数据。刷新一次,添加一次name值;刷新两次,添加两次name值……
解决:增删改后跳转页面用重定向,查询后跳转用转发。查询后往作用域中放需要转发,增删该后用转发不用重定向 地址栏不变每次刷新都重复添加数据。查询后重定向加载不出数据。
- 原因:
-
用重定向,重定向到/grade/list地址上 再刷新都是向list发请求,不会重复添加数据
添加数据代码:
7.2 修改
修改list的jsp,添加修改按钮
逻辑:点谁改谁的,把id携带到跳转中 get的方式将id从地址栏传入
goUpdate
- 封装JdbcUnit函数
- 调用查询
- 将结果放入作用域转发到修改页面
- 修改页面
doUpdate
7.3 删除数据
list页面增加删除按钮
del的servlet