创建动态web项目,根据数据库中表的字段创建bean对象
public class User {
private int id;
private String name;
private int age;
}
写dao层需要实现的功能
package com.sxt.dao;
import java.util.List;
import com.sxt.pojo.User;
public interface IUSerDao {
public List<User> query();
public int add(User user);
public int delete(int id);
public int update(User user);
public User queryById(int id);
}
dao层的实现类实现和数据库的连接以及操作
jdbc连接数据库的基本数据
private String url = "jdbc:mysql://localhost:3306/pms?characterEncoding=utf-8";
private String user = "root";
private String password = "root";
设置编码方式防止乱码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
1.使用jdbc进行全表查询
- 客户端发送请求到服务器
- 服务器分配指定的servlet处理请求
- servlet获取请求相关的信息
- 调用service中的方法处理相关业务请求
- service处理数据库相关的业务调用Dao中的方法处理
- Dao通过jdbc处理数据库相关的请求
- 返回service
- 返回servlet
- servlet跳转到jsp页面处理数据展示业务
- 响应客户需求
dao层query方法代码
@Override
public List<User> query() {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
List<User> list = new ArrayList<>();
try {
//1.加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
//2.获得数据库链接
conn = DriverManager.getConnection(url, userName, password);
sql = "select * from t_user";
//3.通过数据库的连接操作数据库,实现增删改查
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
User user = new User(rs.getInt("id"),rs.getString("name"),rs.getInt("age"));
list.add(user);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
ps.close();
rs.close();
conn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return list;
}
servlet中的代码
// 通过service查询所有用户信息需要的service对象
List<User> list = userService.query();
// 查询数据保存到request中
request.setAttribute("users", list);
// 通过请求转发的方式跳转到user.jsp页面
request.getRequestDispatcher("/user.jsp").forward(request, response);
jsp页面显示
<h1>用户管理:</h1>
<!-- EL表达式的作用就是 从作用域中取值 -->
<c:forEach items="${ users}" var="user">
${user.id } -- ${user.name } -- ${user.age }
<a href="userServlet?task=delete&id=${user.id }">删除数据</a>
<a href="userServlet?task=queryById&id=${user.id }">更新数据</a><br>
</c:forEach>
<h2><a href="add.jsp">添加用户</a></h2>
因为只有一个servlet,要处理不同的业务请求,因此需要一个task分辨功能请求
2.使用jdbc进行增加数据
- 跳转到添加用户的界面
- 通过表单收集用户需要添加的数据
- 提交表单数据到servlet
- servlet调用service中添加数据的方法
- service将需要添加的数据传递给dao
- dao通过jdbc将数据保存到数据库中
- 返回service
- 返回servlet
- 给客户端一个添加成功的提示
dao层的add方法
public int add(User user) {
Connection conn = null;
PreparedStatement ps = null;
try {
//1.加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
//2.获得数据库链接
conn = DriverManager.getConnection(url, userName, password);
sql = "insert into t_user(name,age)values(?,?) ";
//3.通过数据库的连接操作数据库,实现增删改查
ps = conn.prepareStatement(sql);
ps.setString(1, user.getName());
ps.setInt(2, user.getAge());
return ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
ps.close();
conn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
servlet层的业务逻辑
// 获取请求类型的参数
String task = request.getParameter("task");
if ("add".equals(task)) {
// 表示添加用户信
String name = request.getParameter("name");
String age = request.getParameter("age");
User user = new User();
user.setAge(Integer.parseInt(age));
user.setName(name);
// 调用service的方法添加数据
userService.add(user);
// 让用户重新查询一次
response.sendRedirect(request.getContextPath() + "/userServlet");
}
add.jsp页面
<h1>添加用户信息</h1>
<form action="userServlet?task=add" method="post">
姓名:<input type="text" name="name"><br>
年龄:<input type="text" name="age"><br>
<input type="submit" value="提交">
</form>
3.通过jdbc实现删除数据
- 将需要删除的id传递给servlet,servlet将id传递给service,service将id传递给dao,dao通过jdbc将id为该记录的数据删除
dao层delete代码
public int delete(int id) {
Connection conn = null;
PreparedStatement ps = null;
try {
//1.加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
//2.获得数据库链接
conn = DriverManager.getConnection(url, userName, password);
sql = "delete from t_user where id = ?";
//3.通过数据库的连接操作数据库,实现增删改查
ps = conn.prepareStatement(sql);
ps.setInt(1, id);
return ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
ps.close();
conn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
servlet代码
else if ("delete".equals(task)) {
// 表示根据id删除数据
String id = request.getParameter("id");
userService.delete(Integer.parseInt(id));
// 让用户重新查询一次
response.sendRedirect(request.getContextPath() + "/userServlet");
}
4.使用jdbc更新数据
- 更新
1.1 根据修改需要修改记录的id,查到该条记录的详细信息
1.2 跳转到修改界面
1.3 将要修改的信息填充到表单中 - 用户修改数据
2.1 将表单数据提交到servlet
2.2 servlet --> service
2.3 service --> dao
2.4 dao通过jdbc更新数据
2.5 返回service
2.6 返回servlet
2.7 通知客户端重新查询
dao层代码
public User queryById(int id) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
//1.加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
//2.获得数据库链接
conn = DriverManager.getConnection(url, userName, password);
sql = "select * from t_user where id = ?";
//3.通过数据库的连接操作数据库,实现增删改查
ps = conn.prepareStatement(sql);
ps.setInt(1, id);
rs = ps.executeQuery();
if(rs.next()){
return new User(rs.getInt("id"),rs.getString("name"),rs.getInt("age"));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
ps.close();
conn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
public int update(User user) {
Connection conn = null;
PreparedStatement ps = null;
try {
//1.加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
//2.获得数据库链接
conn = DriverManager.getConnection(url, userName, password);
sql = "update t_user set name = ?, age = ? where id = ?";
//3.通过数据库的连接操作数据库,实现增删改查
ps = conn.prepareStatement(sql);
ps.setString(1, user.getName());
ps.setInt(2, user.getAge());
ps.setInt(3, user.getId());
return ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
ps.close();
conn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
servlet代码
else if ("queryById".equals(task)) {
// 根据id查询用户信息
String id = request.getParameter("id");
User user = userService.queryById(Integer.parseInt(id));
// 将user对象信息绑定到request对象中
request.setAttribute("user", user);
// 跳转到更新页面
request.getRequestDispatcher("/update.jsp").forward(request, response);
} else if ("update".equals(task)) {
// 更新用户数据
String id = request.getParameter("id");
String name = request.getParameter("name");
String age = request.getParameter("age");
User user = new User(Integer.parseInt(id), name, Integer.parseInt(age));
userService.update(user);
// 让用户重新查询一次
response.sendRedirect(request.getContextPath() + "/userServlet");
}
update.jsp页面
<h1>更新用户信息</h1>
<form action="userServlet?task=update" method="post">
<input type="hidden" name="id" value="${user.id }">
姓名:<input type="text" name="name" value="${user.name }"><br>
年龄:<input type="text" name="age" value="${user.age }"><br>
<input type="submit" value="提交">
</form>