我有 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>
这是更新 user_roles 表中的用户角色但它不起作用的 servlet 代码?
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;
}