尝试更新数据库时出现MySQLSyntaxErrorException

时间:2014-03-12 20:36:17

标签: java mysql swing

我正在为学校项目做一个应用程序而且我遇到了这个错误我试图解决它,但我似乎无法解决它。

让我先解释一下这个问题,基本上我试图更新以前创建的用户。最初,配置文件只有用户名和密码。我希望用户能够在创建自己的个人资料后添加他希望的任何详细信息。

我有一个具有数据库连接和更新Profile方法的类。另一个类是一个jFrame,用户可以将一些数据输入到文本字段中,目的是将它插入到数据库中现有配置文件的字段中(最初这些字段被声明为null)。

下面你可以看到我的DBConnect类,它包含Login方法和UpdateProfile方法。在登录方法中,我创建了一个包含所有变量和方法的配置文件对象,例如getUsername,getPassword等。

公共类DBConnect {

private Connection dbConnection;
public  Profile profile;

public DBConnect() {

    try {
        dbConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/prototype?user=root");
    } catch (Exception ex) {
        System.out.println("Connection failed :" + ex);
    }
}

public void Login() {
    profile = new Profile(LoginWindow.usernameField.getText(), LoginWindow.passwordField.getText());
    Statement userQuery = null;
    try {
        //Look for the user with valid username and password
        userQuery = dbConnection.createStatement();
        ResultSet rs = userQuery.executeQuery("Select * FROM Profile WHERE pName = \"" + profile.getUsername() + "\" and password = \"" + profile.getPassword() + "\"");
        if (rs.next()) {
            profile.isLoggedin(true);
        } else {
            profile.isLoggedin(false);
        }
    } catch (SQLException ex) {
        profile.isLoggedin(false);
        System.out.println(ex);
    } finally {
        try {
            if (userQuery != null) {
                userQuery.close();
            }
        } catch (SQLException ex) {
            System.out.println("Failed to close login query");
        }
    }
}

public void updateProfile(String _height, String _weight, String _goalWeight, String _age) {
    Statement updateQuery = null;

    try {
        updateQuery = dbConnection.createStatement();
        updateQuery.executeUpdate("UPDATE Profile SET height='" + _height + "',weight='" + _weight + "',goalWeight='" + _goalWeight + "',age='" + _age + "' WHERE pName =" + profile.getUsername());

    } catch (SQLException ex) {
        System.out.println(ex);
    } finally {
        try {
            if (updateQuery != null) {
                updateQuery.close();
            }
        } catch (SQLException ex) {
            System.out.println("Failed to close updateCustomer query");
        }
    }
}

}

我尝试使用Update Profile方法更新一些空的字段,并获取我要更新的配置文件,我写了" WHERE pName =" + profile.getUsername());"为了检索用户的记录。

最后在EditProfile jFrame中我写了这个方法来传递updateProfile方法的参数。

private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {                                           

    LoginWindow.dbc.updateProfile(heightTextField.getText(), weightTextField.getText(), goalWeightTextField.getText(), ageTextField.getText());

}

所有内容都编译但我遇到了mySQLSyntaxError:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:未知列'管理员'在' where子句'

数据库未更新,我不知道如何修复它。

我的假设是" WHERE pName =" + profile.getUsername());"在updateProfile声明中。 "管理员"是profile.getUsername()的结果;及其当前登录用户的实际用户名。

请帮忙。

2 个答案:

答案 0 :(得分:1)

你有一点语法错误:你的行

         updateQuery.executeUpdate("UPDATE Profile SET height='" + _height + "',weight='" + _weight + "',goalWeight='" + _goalWeight + "',age='" + _age + "' WHERE pName =" + profile.getUsername());

应该阅读

        updateQuery.executeUpdate("UPDATE Profile SET height='" + _height + "',weight='" + _weight + "',goalWeight='" + _goalWeight + "',age='" + _age + "' WHERE pName ='" + profile.getUsername()) + "'";

(您需要将pName参数用单引号括起来。)

... 真的需要开始使用PreparedStatement,正如其他人也建议的那样。

答案 1 :(得分:0)

确切地说,问题就在于此。试试看:

ResultSet rs = userQuery.executeQuery("Select * FROM Profile WHERE pName = '" + profile.getUsername() + "' and password = '" + profile.getPassword() + "' ");