简体   繁体   English

如何更新表中的记录?

[英]How to update records in table?

I have 2 table users and user_roles as follow 我有2个表用户user_roles如下

CREATE TABLE IF NOT EXISTS users ( 
 username char(50) NOT NULL, 
 password char(100) NOT NULL,
 PRIMARY KEY (username)
);
INSERT INTO users values ("root","abc"); 

CREATE TABLE IF NOT EXISTS user_roles ( 
 username char(50) NOT NULL, 
 role_name char(50) NOT NULL,
 FOREIGN KEY (username) REFERENCES users(username) 
  ON UPDATE CASCADE
  ON DELETE CASCADE
); 

INSERT INTO user_roles values ("root","admin");
INSERT INTO user_roles values ("root","role1");
INSERT INTO user_roles values ("root","role2");
INSERT INTO user_roles values ("root","role3");
INSERT INTO user_roles values ("root","role4");

and here is html form to update user roles 这是用于更新用户角色的html表单

  <td>Roles :</td>
     <td>
       <select id="role" name="role" multiple>
         <option value="role1" <%= role1== true ? "selected" : ""%>>role1</option>                                          
         <option value="role2" <%= role2== true ? "selected" : ""%> >role2</option>                                                               
         <option value="role3" <%= role3== true ? "selected" : ""%> >role3</option>
         <option value="role4" <%= recap == true ? "selected" : ""%> >role4</option>
     </td>
 <td> 

and here is servlet code which update users roles in user_roles table but its not working ? 这是servlet代码,它更新了user_roles表中的用户角色,但不起作用?

  if (request.getParameterMap().containsKey("roles")) {
        String roleList = request.getParameter("roles");
        String[] role = splitRoles(roleList);

       for (int i = 0; i < role.length; i++) {
              String currentRole = role[i];
                  int editedrole = dao.editUserRoles(currentRole, username);
           }
  }

DAO method ( Updated ) DAO方法(已更新

   public int editUserRoles(String roleName,String username) {
    int done = 0 ;
    boolean hasRole = false; // checking whether records with roleName and username exits or not 
    if (connection != null) {
        try {
                System.out.println("Connected to Database updating role");
                String sql1 = "SELECT * FROM user_roles WHERE username = \"" + username + "\" AND role_name = \"" + roleName + "\" ";
                Statement stmt = connection.createStatement();
                ResultSet resultset = stmt.executeQuery(sql1);
                 while(resultset.next()){
                     hasRole = true;
                 } 

                if(hasRole){   // if record exist then only update it
                String sql2 = "UPDATE user_roles SET role_name = ? WHERE username = ? ";
                PreparedStatement ps2 = connection.prepareStatement(sql2);
                ps2.setString(1, roleName);
                ps2.setString(2,username);
                done = ps2.executeUpdate();
                }
                else{  // else add new 
                    addUserRoles(username,roleName);
                }
        }
        catch(Exception e){
            System.out.println("Exception :"+e.getMessage());
        }
    }
    else {
        System.out.println("Not able to connect to database");
    }
    return done;
}

You have not initialized the username variable and passing it in function so the username is null and query output is nothing. 您尚未初始化用户名变量并将其传递给函数,因此用户名为null,查询输出为空。 before calling editUserRoles() you have to provide the username then you will get the result. 在调用editUserRoles()之前,您必须提供用户名,然后才能得到结果。 i Have tried it will work fine. 我已经试过了,可以正常工作。

I have solved my problem to avoid duplicate records in table,just made changes in servlet code 我已经解决了我的问题,以避免在表中重复记录,只是对Servlet代码进行了更改

       if (action.equalsIgnoreCase("edit")) {        
          String username = request.getParameter("username").trim();
          if (request.getParameterMap().containsKey("roles")) {
                        String roleList = request.getParameter("roles").trim();
                        String[] role = splitRoles(roleList);
                        dao.deleteRoles(username); // first delete roles                                                  
                       for(int i = 0;i<role.length;i++){
                           String currentRole = role[i];  
                           dao.addUserRoles(username,currentRole); // then add roles
                       }
          }

  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM