【问题标题】:passing data parameters to updata SQL table传递数据参数更新 SQL 表
【发布时间】:2013-04-30 03:16:25
【问题描述】:

用户通过 8 个 JTextField 输入他的信息。此信息通过参数传递给 updateUser 方法,该方法使用此信息更新 SQL 表。这是我目前正在尝试做的事情,尽管当用户按下更新按钮时,数据库表没有任何更改

检索用户数据,创建UserOperation并调用updateUser方法

   String userName = textFieldUserName.getText();
                String userPassword = textField_1.getText();
                String securityQuestion = textFieldSecQuestion.getText();
                String securityAnswer = textFieldAnswer.getText();
                String email = textFieldEmail.getText();
                String fName = textFieldName.getText();
                String phoneNumber = textFieldPhone.getText();
                String department = textFieldDepartment.getText();

                UserOperations userOperations = new UserOperations();
                userOperations.updateUser(userName, userPassword, securityQuestion, securityAnswer, email, fName, phoneNumber, department);

updateUser 方法

     public void updateUser (String userName, String userPassword, String securityQuestion, String securityAnswer, String email, String fName, String phoneNumber, String department)
    {

        try
        {
            String sql = "UPDATE systeuser SET username = ?,userpassword = ?,securityquestion = ?,securityanswer = ?,email = ?,fname = ?,phonenumber = ?,department = ? WHERE username = ?";
              stmt = conn.prepareStatement(sql);
              stmt.setString (1, userName);
              stmt.setString (2, userPassword);
              stmt.setString (3, securityQuestion);
              stmt.setString (4, securityAnswer);
              stmt.setString (5, email);
              stmt.setString (6, fName);
              stmt.setString (7, phoneNumber);
              stmt.setString (8, department);
              stmt.setString (9, userName);
              stmt.executeUpdate( );
        }
        catch (Exception e)
        {
            e.printStackTrace ( );

        }

    }

【问题讨论】:

标签: java sql swing


【解决方案1】:

这是因为在 ? 周围放置了单引号。您无需提供这些单引号,因为您正在这样做:-

stmt.setString(1, userName); // setString says that this parameter is a String

因此,在您的情况下,通常用于将String 括在查询中的单引号不需要。

【讨论】:

  • 感谢您的回复。我已经删除了 ? 周围的单引号。按下更新按钮后,我不再收到错误消息,尽管当我自己检查数据库时,更新没有发生。你能看出 SQL 语句本身有什么问题吗?
  • 有两件事让我想知道你为什么要这么做!首先,为什么要更新username,而您要根据它更新另一个fields?接下来,为什么要同时调用executeQuery()executeUpdate()。只需executeUpdate() 即可!看看这个,看看它是否有所作为!另外,table 的名称,我想它不正确或者可能是这里的错字!
  • 我已经编辑了我的主要帖子。 1.我不太明白你的第一个问题,我正在使用 SQL 语句中的用户名来更新表的正确行。 2.感谢您指出这一点,我已经删除了executeQuery()。表名正确,我在另一个项目中已经有systemuser表了
  • 为什么要这样做? UPDATE systeuser SET username = ? ... WHERE username = ?。你为什么还要SET你的username
  • 这就是这里的错误!用户输入一个新的username,而您正在使用新的username 本身进行更新!由于它从未存在于您的表中,因此找不到该用户名的行,因此没有任何更新!希望你明白这里的意思。您可以更改用户名,但您需要在 where 条件中提供旧用户名,在 set! 中提供新用户名!
【解决方案2】:

不要将用于查询参数的问号放在引号中。相反,使用:

UPDATE systeuser SET username = ?, userpassword = ?, ...

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 2022-01-23
    • 2018-10-04
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 2017-05-26
    相关资源
    最近更新 更多