2013-11-14 56 views
0

我有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"); 

,這裏是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> 

這裏是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方法(更新

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; 
} 
+0

剛剛所做的更改是否servlet代碼被調用?你用過調試器嗎?錯誤發生在哪裏?請提供更多細節。另外:您使用'role'作爲HTML中的選擇名稱,但您在代碼中檢查「角色」。 – nfechner

+0

是的servlet被調用是的我通過ajax調用傳遞角色作爲參數 –

+0

什麼是'editUserRoles()'?你能發佈代碼嗎? – Rohan

回答

0

我已經解決了我的問題,以避免在表中重複的記錄,在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 
         } 
      } 

    } 
0

這樣的用戶名爲空,並查詢輸出是什麼你還沒有初始化的變量名並將其傳遞函數。在調用editUserRoles()之前,你必須提供用戶名,然後你會得到結果。我試過它會正常工作。

+0

我傳遞的用戶名不是問題,但假設在更新用戶有2個角色之前,我想添加4個角色,然後添加重複記錄。 –