(转)使用jdbc连接sql数据库实现增删改查

【转载原因:博主总结很好,后续借鉴】

【转载原文:】
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44278630/article/details/88062857

创建动态web项目,根据数据库中表的字段创建bean对象

éè¦æä½çmysql表

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进行全表查询

  1. 客户端发送请求到服务器
  2. 服务器分配指定的servlet处理请求
  3. servlet获取请求相关的信息
  4. 调用service中的方法处理相关业务请求
  5. service处理数据库相关的业务调用Dao中的方法处理
  6. Dao通过jdbc处理数据库相关的请求
  7. 返回service
  8. 返回servlet
  9. servlet跳转到jsp页面处理数据展示业务
  10. 响应客户需求

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进行增加数据

  1. 跳转到添加用户的界面
  2. 通过表单收集用户需要添加的数据
  3. 提交表单数据到servlet
  4. servlet调用service中添加数据的方法
  5. service将需要添加的数据传递给dao
  6. dao通过jdbc将数据保存到数据库中
  7. 返回service
  8. 返回servlet
  9. 给客户端一个添加成功的提示

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.1 根据修改需要修改记录的id,查到该条记录的详细信息
1.2 跳转到修改界面
1.3 将要修改的信息填充到表单中

2.用户修改数据
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>

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值