2013-05-01 67 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。