2009-08-18 4 views
1

Je reçois cette exceptionerreur d'exécution Java JDBC + Interrogation

java.sql.SQLException: Unknown column 'auyu' in 'where clause' 

ma requête et méthode dans ma classe de façade de la base de données.

db.save("delete from users where name = auyu"); 

public static void save(String sql) throws Exception { 
     new DBFacade().connect(); 
     synchronized (c) { 
      c.createStatement().executeUpdate(sql); 
     } 
} 
+0

Veuillez mettre en retrait le code avec quatre espaces afin qu'il soit correctement formaté. –

Répondre

2

+1 à la réponse de Jon Skeet. Expansion et peut-être aller OT, mais il est préférable de paramétrer ces choses et d'assurer l'échappement afin que vous ne soyez pas sensible aux attaques par injection SQL. .: par exemple

public static void deleteUser(userName) 
throws Exception 
{ 
    PreparedStatement ps; 

    new DBFacade().connect(); 
    // (Assuming 'c' is a connection that's in scope somehow) 
    synchronized (c) { 
     // (You'd want to cache the prepared statement in an appropriate 
     // way related to how you're handling connections and pooling) 
     ps = c.prepareStatement("delete from users where name = ?"); 
     ps.setString(1, userName); 
     ps.executeUpdate(); 
    } 
} 

Dans le cas contraire, si un utilisateur fournit un nom comme "anyu», les utilisateurs de drop table;", vous pourriez être pour elle.

6

je soupçonne que vous vouliez dire:

delete from users where name = 'auyu' 

Ceci est encore une commande SQL assez étrange de donner à une méthode « sauver ».

Je voudrais également fortement suggérer que vous utilisez des instructions SQL paramétrées au lieu d'incorporer des données directement dans le SQL lui-même - en particulier si les données proviennent de l'utilisateur.

+0

Merci si je dois utiliser une chaîne comme ceci: String s = "auyu"; – Switch

+0

@Rocky: utilise un état prepare (ou une concaténation de chaîne); voir ma réponse pour plus de détails sur l'option PS. –

2

Vous avez besoin des guillemets simples autour de la auya ('Auyu') et vous aurez besoin de les échapper comme ceci:

"delete from users where name = \'auyu\'"