【问题标题】:How to update rows by Id如何按 Id 更新行
【发布时间】:2018-02-01 11:03:18
【问题描述】:

我正在尝试使用 Java mysql 和 Angular js 通过其 Id 更新一行 问题是我弄错了,数据库中没有任何变化

这是我的java函数:

public boolean modifierClient(int idclient, String nomcomplet, String mail,int numerocompte, String mdp) {
            try 
            {
                System.out.println("Edition du client avec le nom complet: " + idclient);
                Connection con = Connexion.getConnection();

             // L'insert avec mysql
                String query = " UPDATE client SET nomcomplet = ?, mail = ?, numerocompte = ?, mdp = ? WHERE idclient = ?";

                PreparedStatement ps = con.prepareStatement(query);
                ps.setInt(1, idclient);
                ps.setString (2, nomcomplet);
                ps.setString (3, mail);
                ps.setInt (4, numerocompte);
                ps.setString (5, mdp);

                ps.executeUpdate();
                if(ps.executeUpdate() > 0) {
                    return true;

                }
                else 
                {
                    return false;
                }
            }

            catch (Exception e) 
            {
                    System.out.println("Erreur avec modifierClient() -->" + e.getMessage());
                    return false;
            }
        }

这是我的控制器功能:

    @POST
        @Path("modifierClient/{idclient}/{nomcomplet}/{mail}/{numerocompte}/{mdp}")
        @Produces(MediaType.APPLICATION_JSON)
        @Consumes(MediaType.APPLICATION_JSON)
        public boolean modifierClient(@PathParam("idclient") int idclient, @PathParam("nomcomplet") String nomcomplet, @PathParam("mail") String mail,@PathParam("numerocompte") int numerocompte, @PathParam("mdp") String mdp) {
                 ClientDao dao = new ClientDao();
             return dao.modifierClient(idclient,nomcomplet,mail,numerocompte,mdp);
        } 

还有我的 Angular js 函数:

$http.post('rest/client/modifierClient/'+idclient+'/'+$scope.fullname+'/'+$scope.mail+'/'+$scope.numcompte+'/'+$scope.mdp).then(function(data){
                    alert('modified  '+data.data);

                })

我需要你的帮助,谢谢。

【问题讨论】:

  • 不要为同一个查询调用两次ps.executeUpdate()
  • ps.setInt(1, idclient); 但这应该是ps.setInt(5, idclient); 你已经混合了你的参数索引...这取决于定义的String 中从左到右的顺序。
  • @AxelH 谢谢你对我的帮助

标签: javascript java mysql angularjs


【解决方案1】:

您在PreparedStatement 中使用的索引不正确。请参阅以下代码中使用的索引

String query = " UPDATE client SET nomcomplet = ?, mail = ?, numerocompte = ?, mdp = ? WHERE idclient = ?";

PreparedStatement ps = con.prepareStatement(query);

ps.setString (1, nomcomplet);
ps.setString (2, mail);
ps.setInt (3, numerocompte);
ps.setString (4, mdp);

ps.setInt(5, idclient);

索引值取决于您在查询中定义的顺序。

注意:你应该得到一个例外,因为你试图做 idClient = "apassword"idClient 似乎是一个数字。数据库应该告诉您不能将 varchar 与数字进行比较

【讨论】:

    【解决方案2】:

    如下修改你的代码

     ps.setString (1, nomcomplet);
     ps.setString (2, mail);
     ps.setInt (3, numerocompte);
     ps.setString (4, mdp);
     ps.setInt(5, idclient);
    
     int rowsAffected = ps.executeUpdate();
    
     if( rowsAffected  > 0) {
         return true;
     }
     else {
         return false;
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 2019-01-12
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多