Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更新表中的记录?_Java_Sql_Servlets - Fatal编程技术网

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
                       }
          }

  }