2009-08-18 107 views
1

我得到這個例外JDBC + Java的查詢執行錯誤

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

我的查詢和方法在我的數據庫門面類。

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

請使用四個空格縮進代碼,以便格式正確。 – 2009-08-18 18:48:47

回答

2

+1到喬恩斯基特的答案。擴展,也許會OT,但最好將這些參數化並確保轉義,以便不受SQL注入攻擊的影響。例如:

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(); 
    } 
} 

否則,如果用戶提供了像「anyu'這樣的名稱; drop table users;」,那麼您可能會贊成。

6

我懷疑你的意思是:

delete from users where name = 'auyu' 

這仍然是一個非常奇怪的SQL命令來給一個「保存」方法。

我也想強烈建議您使用參數化的SQL語句,而不是直接將數據嵌入到SQL本身 - 特別是如果數據來自用戶。

+0

謝謝,如果我需要使用這樣的字符串: String s =「auyu」; – Switch 2009-08-18 18:51:15

+0

@Rocky:使用preparedStatement(或字符串連接);有關PS選項的詳細信息,請參閱我的答案。 – 2009-08-18 18:55:28

2

你需要使用單引號圍繞auya(「auyu」),你需要逃避他們,像這樣:

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