0

我试图这样做:

String insertQuery=" DELETE FROM Accounts WHERE Username= " + Username + ";";

但我收到这个错误:

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

它获得了正确的用户名等我通过测试知道这一点,我认为语法错误但我没有语法错误?

该表称为帐户。列是用户名和密码,

4

2 回答 2

5

您缺少单引号。在您的情况下(它是字符串)变量需要包含在它们中,否则它将被解释为列。

String insertQuery = "DELETE FROM Accounts WHERE Username = '" + Username + "'";


推荐:

因此,我建议您使用占位符来避免此类问题。不要忘记关心安全性(例如SQL 注入)。值得一提的是,参数化语句也更易于阅读、更安全、更快速。

我不喜欢“硬编码”查询。让我们想象一个场景,如果您有一个包含十列的表,并想象在这种情况下您的查询会是什么样子:绝对是人类不可读的

参数化语句的使用总是非常有效和舒适的做法。您的代码看起来不错并且变得易于阅读,并且“主要”解决方案更加安全和清洁。

看看PreparedStatements。基本示例:

private final String deleteQuery = "DELETE FROM Accounts WHERE Username = ?";

public boolean deleteObject(String username) {
   Connection c = null;
   PreparedStatement ps = null;
   try {
      c = DataSource.getConnection();
      ps = c.prepareStatement(deleteQuery);
      ps.setString(1, username); // numbering starts with 1 not 0!
      return ps.executeUpdate() > 0;
   }
   catch (SQLException ex) {
      System.out.println("Error in deleteObject() method: " + ex.getMessage());
      return false;
   }
   finally {
      if (c != null) {
         try {
            c.close();
         }
         catch (SQLException ex) {
            System.out.println("Error in closing conn: " + ex.getMessage());
         }
      }
   }
}
于 2013-04-05T18:38:09.947 回答
2

如果用户名是 varchar,则需要在 where 子句中的值周围添加单引号。

String insertQuery=" DELETE FROM Accounts WHERE Username= '" + Username + "';";

由于没有引用该值来标识用户名,因此我假设它的 Sam 作为一列。

于 2013-04-05T18:37:48.837 回答