JDBC更新查询错误

时间:2017-10-31 10:31:07

标签: java mysql jdbc

我无法使用where子句在JDBC上执行更新查询。我想通过连接一些变量来执行查询。

protected void updateEmail(String Email, String Username) {
    try {

        conn = DriverManager.getConnection("jdbc:mysql://localhost/project", "root", "");

        String query = "update access set email=" + Email + " where username=" + Username;

        Statement st = conn.createStatement();
        st.executeUpdate(query);

    } catch (SQLException ex) {
        System.out.println(ex);
    } finally {
        try {
            conn.close();
        } catch (SQLException ex) {

        }
    }
}

它说:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'bhusal1' in 'where clause'

3 个答案:

答案 0 :(得分:2)

字符串应该在两个引号'name'之间而不是您必须使用PreparedStatement来避免语法错误或SQL注入:

String query = "update access set email=? where username=?";
PreparedStatement ps = con.prepareStatement(query);

ps.setString(1, email);
ps.setString(2, name);
ps.executeUpdate();

答案 1 :(得分:1)

这很可能是连接请求的问题。您使用的方法非常糟糕,可能会导致任何问题(包括安全性)。

为避免出现问题,请在需要提交sql查询参数时使用PrepareStatement。 这是一个可以解决问题的例子:

void updateEmail(String email,String username) {
    try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/project", "root", "")) {
        String query = "update access set email = ? where username = ?";
        try (PreparedStatement statement = connection.prepareStatement(query)) {
            statement.setString(1, email);
            statement.setString(2, username);

            statement.executeUpdate();
        }

    }
    catch (SQLException e) {
        System.out.println(e);
    }
}

答案 2 :(得分:0)

您应该将您的变量电子邮件和用户名放在where子句中的引号之间,以便能够执行更新查询