2013-05-01 68 views
1

我试图将数据插入到我的MYSQL数据库中。我想插入一个int到我没有问题的数据库中。但是,我想插入(VALUES)在哪里。当我尝试这个时,我得到一个MYSQL语法错误。Java和MYSQL语法问题

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

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

回答

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(); 
+1

谢谢!修复! :) – Nic 2013-05-01 15:25:23

+0

不客气':)' – 2013-05-01 15:25:58

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] 
0

不是一个直接的答案,但更多的是最佳实践....

您应该避免做这种类型的字符串连接的任何SQL。您容易受到sql injection的影响,并且效果不佳。相反,您应该使用开源spring framework来查看使用JdbcTemplates或NamedJdbcTemplate。

0

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