天天看點

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

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

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

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

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

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

106 }

5:執行工具類之後傳回到service層(業務邏輯層),service層(業務邏輯層)傳回到servlet層,删除的servlet層,删除的servlet層到提示資訊層,提示資訊層到查詢的servlet層,查詢的servlet層執行service層(業務邏輯層),service層(業務邏輯層)調用使用者資訊的dao層(資料互動層),dao層傳回到service層(業務邏輯層),service層(業務邏輯層)傳回到查詢的servlet層,servlet層轉發到userinfo_list.jsp這個顯示使用者資訊的頁面。至此僞删除操作全部完成,希望看到這個部落格的明白這個執行的流程,思路明白,代碼會寫,這樣就ok了。

最後将示範的效果展示一下:

打開使用者資訊的頁面:

Java圖書資訊删除的方法_基于jsp+servlet圖書管理系統之背景使用者資訊删除操作

點選删除之後檢視第一行已經消失咯哦:

Java圖書資訊删除的方法_基于jsp+servlet圖書管理系統之背景使用者資訊删除操作

至此使用jsp+servlet完成使用者資訊的增删改查已經完結了,希望對大家有所幫助。後面會繼續寫圖書的增删改查,但是圖書的增删改查的代碼和流程不再叙述,因為隻是字段不一緻而已,将介紹使用的小工具的具體用法,當寫借書的時候再将使用者借書的代碼分享出來,那麼整個合起來就完成了簡易的圖書管理系統。(每次代碼的分享都是在原有基礎上不斷的增加,是以最後的代碼分享肯定比開始的代碼分享複雜合完整。)