Java图书信息删除的方法_基于jsp+servlet图书管理系统之后台用户信息删除操作

自此,基于jsp+servlet开发的用户信息增删该查已经全部写完了,上面的链接是全部的代码,包含增删该查和数据库。

注意点:

1:删除操作使用的是伪删除。即只是不在页面显示了,但是还保存在数据库。

2:分页查询使用的是一个小工具,后面有时间把这些很实用的小工具详细介绍一下。

3:在提交的表单和后台数据交互的时候使用了一个封装好的小工具。后面有时间介绍。

下面先将删除操作的流程过一遍:

1:执行伪删除操作的流程:

1.1:点击删除按钮就是这一句话,提交到system/userinfodelete这个路径的servlet层,注意是doSet()方法。

paramId="userId" paramProperty="userId">

1.2:执行到servlet  层之后调用service业务逻辑层伪删除方法。

UserInfoService service=new UserInfoServiceImpl();

//调用业务逻辑层的删除方法

boolean mark=service.deleteUser(user);

1.3:service层(业务逻辑层)调用工具类的公共方法,

(由于修改和插入可以提取公共的方法,这里做的伪删除其实就是修改也可以使用工具类)

int count=DbUtils.addAndUpdate(sql, list.toArray());

1.4:执行工具类之后又返回到service层(业务逻辑层)

return ps.executeUpdate();

1.5:业务逻辑层又返回true或者false,返回到servlet层。

int count=DbUtils.addAndUpdate(sql, list.toArray());

if(count>0){

return true;

}else{

return false;

}

1.6:执行servlet层之后之后转发到user_info.jsp页面,并且提示信息

boolean mark=service.deleteUser(user);

if(mark){

request.setAttribute("info", "用户信息删除成功");

}else{

request.setAttribute("info", "用户信息删除失败");

}

request.getRequestDispatcher("/view/system/userinfo/user_info.jsp").forward(request, response);

1.7:执行到user_info.jsp页面之后又转到system/userinfoselect这个servlet层。

window.location="system/userinfoselect";

1.8:转到servlet层之后又转发到userinfo_list.jsp页面。显示当前删除之后的信息。

request.getRequestDispatcher("/view/system/userinfo/userinfo_list.jsp").forward(request, response);

至此删除信息已经完成了,不过需要注意的是删除操作到了上面1.8这个步奏的时候执行select语句很特殊,需要注意

StringBuffer sql=new StringBuffer("select * from user_info where user_mark!=-1 ");

即做了标识,-1作为伪删除的,所以查询出!=-1的信息,但是数据库里面的信息还是存在的。

下面将重要的代码按照流程写一下:

1:点击删除按钮,即下面此页面的代码。

1

2 pageEncoding="UTF-8"%>

3

4 //获取绝对路径路径

5 String path =request.getContextPath();6 String basePath = request.getScheme() + "://"

7 + request.getServerName() + ":" +request.getServerPort()8 + path + "/";9 %>

10

11

12

13

14

15

16

17

用户管理-用户查询

18

19

20

22

23

24

25

26

系统管理

27

用户管理

28

用户查询

29

30

31

32

33

34 账号:

35

36 姓名:

37

38

39 全部

40 普通会员

41 管理员

42

43

44 添加用户

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

2:之后就到了删除的servlet层。

1 packagecom.bie.system.servlet;2

3 importjava.io.IOException;4

5 importjavax.servlet.ServletException;6 importjavax.servlet.annotation.WebServlet;7 importjavax.servlet.http.HttpServlet;8 importjavax.servlet.http.HttpServletRequest;9 importjavax.servlet.http.HttpServletResponse;10

11 importcom.bie.po.UserInfo;12 importcom.bie.system.service.UserInfoService;13 importcom.bie.system.service.impl.UserInfoServiceImpl;14 importcom.my.web.servlet.RequestBeanUtils;15

16 @WebServlet("/system/userinfodelete")17 public class UserInfoDeleteServlet extendsHttpServlet{18

19 private static final long serialVersionUID = 1L;20

21 @Override22 protected voiddoGet(HttpServletRequest request, HttpServletResponse response)23 throwsServletException, IOException {24 //将表单提交的数据封装到javabean中的用户信息表中

25 UserInfo user=RequestBeanUtils.requestToSimpleBean(request, UserInfo.class);26 UserInfoService service=newUserInfoServiceImpl();27 //调用业务逻辑层的删除方法

28 boolean mark=service.deleteUser(user);29 if(mark){30 request.setAttribute("info", "用户信息删除成功");31 }else{32 request.setAttribute("info", "用户信息删除失败");33 }34 request.getRequestDispatcher("/view/system/userinfo/user_info.jsp").forward(request, response);35 }36

37

38

39 }

3:执行删除的servlet层之后调用service层(业务逻辑层)的伪删除方法

1 packagecom.bie.system.service.impl;2

3 importjava.util.ArrayList;4 importjava.util.List;5

6 importcom.bie.po.UserInfo;7 importcom.bie.system.dao.UserInfoDao;8 importcom.bie.system.dao.impl.UserInfoDaoImpl;9 importcom.bie.system.service.UserInfoService;10 importcom.bie.utils.DbUtils;11 importcom.bie.utils.MarkUtils;12 /***13 * 1.4:这是业务逻辑层的实现类,实现用户信息的接口14 *15 * 切忌新手写好service业务逻辑层需要test测试(junit)16 *@authorbiehongli17 *18 */

19 public class UserInfoServiceImpl implementsUserInfoService{20

21 private UserInfoDao dao=newUserInfoDaoImpl();22 @Override23 public booleaninsertUser(UserInfo user) {24 try{25 //System.out.println(user);//测试传来的UserInfo里面是否够存在用户信息

26 if(user!=null && user.getUserAccount()!=null){27 String sql="INSERT INTO user_info(user_account,user_pw,"

28 + "user_number,user_name,user_age,user_sex,user_mark)"

29 + " VALUES(?,?,?,?,?,?,?)";30 List list=new ArrayList();31 //可以理解位将实体类中get到的信息放到数据库中,因为set设置的信息就是为了查到数据库中

32 list.add(user.getUserAccount());//将设置好的账号信息保存到集合中

33 list.add(user.getUserPw());//将设置好的账号信息保存到集合中

34 list.add(user.getUserNumber());//将设置好的密码信息保存到集合中

35 list.add(user.getUserName());//将设置好的姓名信息保存到集合中

36 list.add(user.getUserAge());//将设置好的年龄信息保存到集合中

37 list.add(user.getUserSex());//将设置好的性别信息保存到集合中38 //list.add(user.getUserMark());//将设置好的标识信息保存到集合中39 //后台只可以添加管理员

40 user.setUserMark(MarkUtils.USER_MARK_MANAGER);41 //将设置为默认的管理员添加到数据库

42 list.add(user.getUserMark());43

44 //将封装到集合list中的信息和sql语句传递到DbUtils封装好的 方法中45 //这里sql转化位String语句,list转化位数组类型

46 int count=DbUtils.addAndUpdate(sql.toString(), list.toArray());47 //System.out.println(count);//测试返回值是0还是1

48 if(count>0){49 return true;//成功返回true

50 }else{51 return false;//失败返回false

52 }53 }54 }catch(Exception e){55 e.printStackTrace();56 }57 return false;58 }59

60 @Override61 public ListselectUser(UserInfo user) {62 //使用StringBuffer进行字符串的拼接,不使用String63 //StringBuffer sql=new StringBuffer("select * from user_info where 1=1 ");

64 StringBuffer sql=new StringBuffer("select * from user_info where user_mark!=-1 ");65 //设置集合,用户存放用户信息设置值的时候使用

66 List list=null;67 //判断用户的信息不为空的时候

68 if(user!=null){69 list=new ArrayList();70 //按照账号查询,如果账号不为null且不为空

71 if(user.getUserAccount()!=null && !user.getUserAccount().equals("")){72 sql.append(" and user_account=?");73 list.add(user.getUserAccount());74 }75 //按照姓名查询,如果姓名不为null且不为空

76 if(user.getUserName()!=null && !user.getUserName().equals("")){77 sql.append(" and user_name like ?");78 //模糊查询这样拼接字符串

79 list.add("%"+user.getUserName()+"%");80 }81 //按照标识查询,如果标识不为null且不为空

82 if(user.getUserMark()!=null && !user.getUserMark().equals("")){83 sql.append(" and user_mark=?");84 list.add(user.getUserMark());85 }86 }87

88 sql.append(" order by user_id desc");89 //返回的参数,sql语句是字符类型,集合转化为数组类型

90 returndao.selectUser(sql.toString(), list.toArray());91 }92

93 @Override94 public booleanupdateUser(UserInfo user) {95 try{96 if(user!=null && user.getUserId()!=null){97 //更新的sql语句

98 String sql="UPDATE user_info SET user_account=?,"

99 + "user_pw=?,user_number=?,user_name=?,"

100 + "user_age=?,user_sex=? WHERE user_id=?";101 List list=new ArrayList();102 //添加到集合中的顺序必须和上面些的字段一致,不然报错

103 list.add(user.getUserAccount());104 list.add(user.getUserPw());105 list.add(user.getUserNumber());106 list.add(user.getUserName());107 list.add(user.getUserAge());108 list.add(user.getUserSex());109 list.add(user.getUserId());110

111 //添加和修改(伪删除)都可以调用工具类里面公共的方法。

112 int count=DbUtils.addAndUpdate(sql, list.toArray());113 if(count>0){114 return true;115 }else{116 return false;117 }118 }119 }catch(Exception e){120 e.printStackTrace();121 }122 return false;123 }124

125 @Override126 publicUserInfo getUser(UserInfo user) {127 //判断用户信息和id编号是否为空

128 if(user!=null && user.getUserId()!=null){129 returndao.getUser(user.getUserId());130 }131 return null;132 }133

134 @Override135 public booleandeleteUser(UserInfo user) {136 try{137 String sql="update user_info set user_mark=? where user_id=?";138 List list=new ArrayList();139 //直接给user_mark设置为-1,查询的时候加上等于-1的不显示,即在页面就无法显示了

140 list.add(MarkUtils.USER_MARK_DEL);141 list.add(user.getUserId());142 int count=DbUtils.addAndUpdate(sql, list.toArray());143 if(count>0){144 return true;145 }else{146 return false;147 }148 }catch(Exception e){149 e.printStackTrace();150 }151 return false;152 }153

154

155 }

4:执行service业务逻辑层之后调用工具类

1 packagecom.bie.utils;2

3 importjava.sql.Connection;4 importjava.sql.DriverManager;5 importjava.sql.PreparedStatement;6 importjava.sql.ResultSet;7 importjava.util.ResourceBundle;8

9 /***10 * 1.1:写DbUtils的工具类11 * :utils是工具类,方便以后调用12 * 在main方法测试的时候出现一个错误,13 * 瞄了一眼立马想到了没有添加mysql的驱动,14 * 所以我感觉测试还是很有必要的15 *@authorbiehongli16 *17 */

18 public classDbUtils {19

20 private static String drivername;//数据库驱动,为了加载数据库驱动

21 private static String url;//数据库连接字符串,只要是找到自己的数据库,需要和自己的数据库一致

22 private static String user;//数据库账号,需要和自己的一致

23 private static String password;//数据库密码,需要和自己的一致

24

25 static{26 drivername=ResourceBundle.getBundle("db").getString("drivername");27 url=ResourceBundle.getBundle("db").getString("url");28 user=ResourceBundle.getBundle("db").getString("user");29 password=ResourceBundle.getBundle("db").getString("password");30 }31

32 /***33 * 加载数据库驱动和连接到数据库,我一般是加载和连接的时候分别输出,可以快速找到哪里出错34 *@return

35 *@throwsException36 */

37 public static Connection getCon() throwsException{38 Class.forName(drivername);//记载数据库驱动

39 System.out.println("测试加载数据库驱动");40 //连接到数据库

41 Connection con=DriverManager.getConnection(url, user, password);42 System.out.println("测试连接到数据库");43 returncon;44 }45

46 /***47 * 这个用来判断关闭数据库的方法48 *@paramcon 关闭Connection的连接49 *@paramps 关闭PreparedStatement50 *@paramrs 关闭ResultSet51 */

52 public static voidgetClose(Connection con,PreparedStatement ps,ResultSet rs){53 //关闭数据库,注意关闭的顺序。养成好习惯

54 try{55 if(rs!=null){56 rs.close();57 }58 if(ps!=null){59 ps.close();60 }61 if(con!=null){62 con.close();63 }64 }catch(Exception e){65 e.printStackTrace();66 }67 }68

69 /***70 * 添加(插入)和更新(更改)可以提取公共的方法写在工具类中71 * 删除一般使用伪删除,这样删除就是更新(更改)操作,72 * 所以只有查询(查找)需要写更多的代码73 *@paramsql 外面传来的sql语句74 *@paramarr 外面传来的数组类型的,是用户信息封装到集合传递进来75 *@return返回的是一个整形的数据类型76 */

77 public static intaddAndUpdate(String sql,Object[] arr){78 Connection con=null;79 PreparedStatement ps=null;80 try{81 con=DbUtils.getCon();//第一步连接数据库

82 ps=con.prepareStatement(sql);//第二步预编译83 //第三步给sql语句中的参数复制

84 for(int i=0;i

88 returnps.executeUpdate();89 }catch(Exception e){90 e.printStackTrace();91 }finally{92 //关闭资源,如果没有ResultSet类型的,加上null即可

93 DbUtils.getClose(con, ps, null);94 }95 return 0;96 }97 /*public static void main(String[] args) {98 //我一般在写好连接数据库的工具类时先测试一下,避免连接数据库都失败,测试后可注释即可99 try {100 DbUtils.getCon();101 System.out.println("测试连接数据库终极版!!!");102 } catch (Exception e) {103 e.printStackTrace();104 }105 }*/

106 }

5:执行工具类之后返回到service层(业务逻辑层),service层(业务逻辑层)返回到servlet层,删除的servlet层,删除的servlet层到提示信息层,提示信息层到查询的servlet层,查询的servlet层执行service层(业务逻辑层),service层(业务逻辑层)调用用户信息的dao层(数据交互层),dao层返回到service层(业务逻辑层),service层(业务逻辑层)返回到查询的servlet层,servlet层转发到userinfo_list.jsp这个显示用户信息的页面。至此伪删除操作全部完成,希望看到这个博客的明白这个执行的流程,思路明白,代码会写,这样就ok了。

最后将演示的效果展示一下:

打开用户信息的页面:

6488a38b48a5d702fe7ba42093fe7f43.png

点击删除之后查看第一行已经消失咯哦:

da87ce9cb7b51f8b57aa0f115a9bf18c.png

至此使用jsp+servlet完成用户信息的增删改查已经完结了,希望对大家有所帮助。后面会继续写图书的增删改查,但是图书的增删改查的代码和流程不再叙述,因为只是字段不一致而已,将介绍使用的小工具的具体用法,当写借书的时候再将用户借书的代码分享出来,那么整个合起来就完成了简易的图书管理系统。(每次代码的分享都是在原有基础上不断的增加,所以最后的代码分享肯定比开始的代码分享复杂合完整。)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图书馆管理系统是一个基于JavaJSPServlet和MySQL的软件系统,旨在实现对图书馆业务的自动化管理和信息化处理。该系统主要包括以下功能: 1. 图书信息管理:包括图书的录入、修改、删除和查询等操作。管理员可以通过该功能对馆藏图书进行管理和维护,包括图书的基本信息、借阅状态、归还日期等。 2. 读者信息管理:实现读者信息的录入、修改、删除和查询等操作。读者可以通过该功能查询自己的图书借阅情况、预约图书、办理借阅证等。 3. 图书借阅管理:包括读者借书、还书和续借等操作。读者可以通过该功能查询图书的借阅情况、归还日期,并进行相关操作。 4. 图书预约管理:读者可以通过该功能查询图书的可借阅情况,并预约待借图书。系统会自动为读者预留图书,并在指定时间内进行借阅。 5. 图书归还管理:读者归还图书后,管理员通过该功能进行图书归还登记,更新图书的借阅状态和借阅记录。 6. 图书查询统计:系统提供了各种查询和统计功能,包括图书的分类查询、读者借阅情况统计、图书流通统计等,用于方便管理员进行数据分析和决策。 7. 系统权限管理:系统设置了管理员和读者两个角色,分别对应不同的功能和权限。管理员可以对系统进行设置和管理,读者只能进行查询和借阅等操作。 该系统基于MySQL数据库存储图书和读者信息,通过JavaJSPServlet技术实现系统的前后端交互和逻辑处理。借助这些技术,系统可以实现快速、安全、可靠的图书馆管理服务,提高图书馆工作效率和读者体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值