2013-05-01 5 views
1

J'essaie d'insérer des données dans ma base de données MYSQL. Je veux insérer un int dans la base de données que je n'ai aucun problème à faire. Cependant, je veux INSÉRER DANS (VALEURS) O WH. Je reçois une erreur de syntaxe MYSQL lorsque j'essaie cela.Syntaxe Java et MYSQL Problème

Je peux INSERT et SELECT WHERE tant qu'ils sont dans deux déclarations séparées. Voici mon code:

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

Répondre

5

En fait, une déclaration INSERT ne peut pas avoir une clause WHERE. Je pense que vous voulez UPDATE un certain enregistrement, par exemple

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

Le seul moment où une déclaration INSERT peut avoir une clause WHERE est lorsque vous insérez des enregistrements à partir du résultat d'une déclaration SELECT, par exemple

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

En tant que sidenote, votre style de codage actuel est vulnérable avec SQL Injection. Envisagez d'utiliser PreparedStatement.


exemple de base d'un 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

Merci beaucoup! Je l'ai réparé! :) – Nic

+0

vous êtes les bienvenus ':)' –

2

MySQL Syntaxe de INSERT ne prend pas en charge la clause WHERE de sorte que pourquoi vous avez un problème de syntaxe. Peut-être vous êtes à la recherche d'une MISE À JOUR:

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

Pas une réponse directe mais plus d'une meilleure pratique ....

Vous devriez éviter de faire ce type de concaténation de chaîne pour une sql. Vous êtes vulnérable à sql injection et il n'est pas bien à l'échelle. Au lieu de cela, vous devriez utiliser JdbcTemplates ou NamedJdbcTemplate en utilisant l'opensource spring framework.

0

La clause WHERE ne s'applique pas à la syntaxe INSERT INTO. Vous voulez insérer une nouvelle ligne dans la table, et vous devez ajouter le nom d'utilisateur et le mot de passe ainsi que Inventory.inventory dans VALUES.