【问题标题】:Java and MYSQL Syntax IssueJava 和 MYSQL 语法问题
【发布时间】:2013-05-01 15:12:52
【问题描述】:

我正在尝试将数据插入到我的 MYSQL 数据库中。我想将一个 int 插入数据库中,这没有问题。但是,我想在哪里插入(值)。尝试此操作时出现 MYSQL 语法错误。

只要它们在两个单独的语句中,我就可以 INSERT 和 SELECT WHERE。这是我的代码:

    String query = ("INSERT INTO `accounts` (inventory) " + "VALUES ('"
            + Inventory.inventory + "') WHERE username='" + Frame.username
            + "' and password = '" + Frame.password + "'");

【问题讨论】:

    标签: java mysql syntax


    【解决方案1】:

    基本上,INSERT 语句不能有WHERE 子句。我在想你想UPDATE某条记录,例如

    UPDATE accounts
    SET inventory = 'valueHere'
    WHERE userName = 'userHEre' AND password = 'passHere'
    

    INSERT 语句可以有WHERE 子句的唯一情况是当您从SELECT 语句的结果中插入记录时,例如

    INSERT INTO tableName (col1, ..., colN)
    SELECT col1, ..., colN
    FROM table2
    // WHERE ..your conditions here..
    

    作为旁注,您当前的编码风格很容易受到SQL Injection 的影响。考虑使用PreparedStatement


    PreparedStatement 的基本示例

    String updateString = "UPDATE accounts SET inventory = ? WHERE userName = ? AND password = ?";
    PreparedStatement updateStmt = con.prepareStatement(updateString);
    updateStmt.setString(1, Inventory.inventory);
    updateStmt.setString(2, Frame.username);
    updateStmt.setString(3, Frame.password);
    updateStmt.executeUpdate();
    

    【讨论】:

      【解决方案2】:

      MySQL INSERT 语法不支持 WHERE 子句,这就是您遇到语法问题的原因。也许您正在寻找更新:

      UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
          SET col_name1=expr1 [, col_name2=expr2 ...]
          [WHERE where_definition]
          [ORDER BY ...]
          [LIMIT row_count]
      

      【讨论】:

        【解决方案3】:

        不是直接的答案,而是最佳实践....

        您应该避免对任何 sql 进行这种类型的字符串连接。您容易受到sql injection 的攻击,并且它不能很好地扩展。相反,您应该考虑使用 JdbcTemplates 或使用开源 spring framework 的 NamedJdbcTemplate。

        【讨论】:

          【解决方案4】:

          WHERE 不适用于 INSERT INTO 语法。您想在表中插入一个新行,您应该在 VALUES 集中添加用户名和密码以及 Inventory.inventory。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-03-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-18
            相关资源
            最近更新 更多