【问题标题】:How to change value of specific field of MySql database using Javafx application?如何使用 Javafx 应用程序更改 MySql 数据库特定字段的值?
【发布时间】:2018-01-29 12:14:48
【问题描述】:

我正在处理一个需要访问用户数据库的项目。我创建了一个 javafx 面板,显示数据库中的所有用户及其在表中的数据。我想制作一种方法,将所选用户状态的值从用户更改为管理员,反之亦然,但无论我做什么,我都无法让它正常工作。这是该方法的代码:

private void grantAdminRights() {
        admninrightsButton.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent admnrights) {
                try {
                    Connection con = DbUtil.getInstance().getConnection();
                    User selectedUser = userTable.getSelectionModel().getSelectedItem();
                    Integer selectedUserID = selectedUser.getUserID();
                    String grantAdminRights = "UPDATE `androidshop`.`userdatabase` SET `status`='admin' WHERE `userID`="+selectedUserID +"";
                    String grantUserRights = "UPDATE `androidshop`.`userdatabase` SET `status`='user' WHERE `userID`="+selectedUserID +"";
                    String statusValidation = selectedUser.getStatus();

                    if (statusValidation.equals("user"))
                    {
                        selectedUser.setStatus("admin");
                        PreparedStatement ps = con.prepareStatement(grantAdminRights);
                        ps.setInt(1, selectedUser.getUserID());
                        ps.executeUpdate();
                    } 
                    else if (statusValidation.equals("admin")) 
                    {
                        selectedUser.setStatus("user");
                        PreparedStatement ps = con.prepareStatement(grantUserRights);
                        ps.setInt(1, selectedUser.getUserID());
                        ps.executeUpdate();
                    } 
                    else {
                        System.out.println("Invalid field value");
                    }
                } 
                catch (SQLException e) {
                    e.printStackTrace();
                }


                }

        });
    }

用户类的内容:

public class User {
    public int userID;
    public String username;
    public String password;
    public String status;
    public String firstname;
    public String lastname;
    public String shippingadress;
    public String preferredpayment;
    public String purchaseditems;

    public enum PreferredPayment {
        CreditCard, PayPal, OnReceipt;
    }

    public int getUserID() {
        return userID;
    }

    public void setUserID(int userID) {
        this.userID = userID;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public String getShippingadress() {
        return shippingadress;
    }

    public void setShippingadress(String shippingadress) {
        this.shippingadress = shippingadress;
    }

    public String getPreferredpayment() {
        return preferredpayment;
    }

    public void setPreferredpayment(String preferredpayment) {
        this.preferredpayment = preferredpayment;
    }

    public String getPurchaseditems() {
        return purchaseditems;
    }

    public void setPurchaseditems(String purchaseditems) {
        this.purchaseditems = purchaseditems;
    }
public User(int userID, String status, String username, String firstname, String lastname, String shippingadress, String preferredpayment, String purchaseditems) {
        this.userID = userID;
        this.username = username;
        this.status = status;
        this.firstname = firstname;
        this.lastname = lastname;
        this.shippingadress = shippingadress;
        this.preferredpayment = preferredpayment;
        this.purchaseditems = purchaseditems;
    }
}

用数据填充表格的方法(正常工作):

public void buildData() {
     data = FXCollections.observableArrayList();
     try {
         Connection con = DbUtil.getInstance().getConnection();
         String sql = "SELECT * FROM userdatabase";
         ResultSet rs = con.createStatement().executeQuery(sql);
         while(rs.next()) {
             data.add(new User(rs.getInt(1), rs.getString(2),  rs.getString(3), rs.getString(5), rs.getString(6),  rs.getString(7), rs.getString(8), rs.getString(9)));
         }
     } catch (SQLException ex){
         ex.printStackTrace();   
     }

        idColumn.setCellValueFactory(new PropertyValueFactory<User, Integer>("userID"));
        statusColumn.setCellValueFactory(new PropertyValueFactory<User, String>("status"));
        usernameColumn.setCellValueFactory(new PropertyValueFactory<User, String>("username"));
        firstNameColumn.setCellValueFactory(new PropertyValueFactory<User, String>("firstname"));
        lastNameColumn.setCellValueFactory(new PropertyValueFactory<User, String>("lastname"));
        adressColumn.setCellValueFactory(new PropertyValueFactory<User, String>("shippingadress"));
        paymentColumn.setCellValueFactory(new PropertyValueFactory<User, String>("preferredpayment"));
        itemsColumn.setCellValueFactory(new PropertyValueFactory<User, String>("purchaseditems"));

        userTable.setItems(null);
        userTable.setItems(data);
    }

显示的表格内容:

[表格内容]https://imgur.com/a/Bdoxg

我怎样才能让grantAdminRights 方法按预期工作?我很感激任何有关代码的反馈和提示。

感谢所有抽空回答的人。

【问题讨论】:

  • 您是否遇到任何异常或错误?
  • 使用此代码,我只能从我的方法中获得“无效字段值”通信。在我尝试将 (statusValidation.equals("user")) 更改为 (statusValidation == user) 并得到 NullPointerException 之前,在对查询进行一些更改之前,我有一个 IndexOutOfBounds。
  • 那么statusValidation的值是多少?
  • 它应该只有“用户”或“管理员”,并且只有这些值显示在表格中。如果它没有产生预期的结果,它一定不是它们。我试图获得价值的方式可能有问题,但我想不出其他任何东西。现在,当我尝试这种方法时,我得到:java.sql.SQLException:参数索引超出范围(1 > 参数数量,即 0)。在这一点上我有点困惑。
  • 您还没有回答问题。我知道它应该只有"admin""user",但是在这种情况下你实际上得到了什么价值

标签: java mysql javafx


【解决方案1】:

我对该方法进行了以下更改,现在它可以按预期工作:

private void grantAdminRights() {
            admninrightsButton.setOnAction(new EventHandler<ActionEvent>() {

                @Override
                public void handle(ActionEvent admnrights) {
                    try {
                        Connection con = DbUtil.getInstance().getConnection();
                        User selectedUser = userTable.getSelectionModel().getSelectedItem(); 
                        String grantAdminRights = "UPDATE `androidshop`.`userdatabase` SET `status`='admin' WHERE `userID`= ?";
                        String grantUserRights = "UPDATE `androidshop`.`userdatabase` SET `status`='user' WHERE `userID`= ?";
                        String statusValidation = selectedUser.getStatus();

                        if (selectedUser != null && statusValidation.equals("user"))
                        {
                            selectedUser.setStatus("admin");
                            PreparedStatement ps = con.prepareStatement(grantAdminRights);
                            ps.setInt(1, selectedUser.getUserID());
                            ps.executeUpdate();
                        } 
                        else if (selectedUser != null && statusValidation.equals("admin")) 
                        {
                            selectedUser.setStatus("user");
                            PreparedStatement ps = con.prepareStatement(grantUserRights);
                            ps.setInt(1, selectedUser.getUserID());
                            ps.executeUpdate();
                        } 
                        else {
                            System.out.println("Invalid field value");
                            System.out.println(statusValidation);
                        }
                    } 
                    catch (SQLException e) {
                        e.printStackTrace();
                    }


                    }

            });
        }

感谢大家的提示,让我到达那里。

【讨论】:

    猜你喜欢
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    相关资源
    最近更新 更多