我有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;
}
剛剛所做的更改是否servlet代碼被調用?你用過調試器嗎?錯誤發生在哪裏?請提供更多細節。另外:您使用'role'作爲HTML中的選擇名稱,但您在代碼中檢查「角色」。 – nfechner
是的servlet被調用是的我通過ajax調用傳遞角色作爲參數 –
什麼是'editUserRoles()'?你能發佈代碼嗎? – Rohan