Java 如何更新表中的记录?
我有两个表用户和用户角色,如下所示Java 如何更新表中的记录?,java,sql,servlets,Java,Sql,Servlets,我有两个表用户和用户角色,如下所示 如果不存在用户,则创建表( 用户名字符(50)不为空, 密码字符(100)不为空, 主键(用户名) ); 插入用户值(“根”、“abc”); 如果不存在用户角色,则创建表( 用户名字符(50)不为空, 角色名称字符(50)不为空, 外键(用户名)引用用户(用户名) 关于更新级联 关于删除级联 ); 在用户角色中插入值(“root”、“admin”); 在用户角色中插入值(“根”、“角色1”); 在用户角色中插入值(“根”、“角色2”); 在用户角色中插入值(
如果不存在用户,则创建表(
用户名字符(50)不为空,
密码字符(100)不为空,
主键(用户名)
);
插入用户值(“根”、“abc”);
如果不存在用户角色,则创建表(
用户名字符(50)不为空,
角色名称字符(50)不为空,
外键(用户名)引用用户(用户名)
关于更新级联
关于删除级联
);
在用户角色中插入值(“root”、“admin”);
在用户角色中插入值(“根”、“角色1”);
在用户角色中插入值(“根”、“角色2”);
在用户角色中插入值(“根”、“角色3”);
在用户角色中插入值(“根”、“角色4”);
下面是更新用户角色的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>
您尚未初始化username变量并将其传入函数,因此username为null,查询输出为nothing。在调用editUserRoles()之前,必须提供用户名,然后才能得到结果。我已经试过了,它可以正常工作。我已经解决了我的问题,避免了表中的重复记录,只是在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
}
}
}
if(action.equalsIgnoreCase(“编辑”){
字符串username=request.getParameter(“username”).trim();
if(request.getParameterMap().containsKey(“角色”)){
字符串roleList=request.getParameter(“角色”).trim();
字符串[]角色=拆分角色(角色列表);
deleteRoles(用户名);//首先删除角色
对于(int i=0;i是否调用servlet代码?是否使用了调试器?错误发生在何处?请提供更多详细信息。另外:您在HTML中使用了role
作为选择名称,但您在代码中检查了roles
。是的servlet被调用是的我正在通过ajax调用将角色作为参数传递什么是editUserRoles()
?您可以发布它的代码吗?在servlet代码中,您使用的是角色
,而不是角色
。请尝试打印角色列表的值
。检查它是否有值。我正在通过ajax var roles=$(“#role”).val()传递角色;如果(roles!=null){params['roles']=roles.join();}及其包含值我正在传递用户名,这不是问题,但假设在更新之前用户有2个角色,我想添加4个角色,然后添加重复记录。。
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;
}
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
}
}
}