我有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 :(得分:0)
您尚未初始化username变量并将其传递给函数,因此用户名为null,查询输出为空。在调用editUserRoles()之前,您必须提供用户名,然后您将获得结果。我试过它会工作正常。
答案 1 :(得分: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
}
}
}