1

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

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

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

4 回答 4

5

基本上,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();
于 2013-05-01T15:14:44.397 回答
2

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

UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
    SET col_name1=expr1 [, col_name2=expr2 ...]
    [WHERE where_definition]
    [ORDER BY ...]
    [LIMIT row_count]
于 2013-05-01T15:15:33.500 回答
0

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

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

于 2013-05-01T15:18:39.427 回答
0

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

于 2013-05-01T15:21:09.937 回答