java
  • sql
  • 2017-01-20 80 views 1 likes 
    1

    我開發了一個java程序,我需要更新並插入用戶的登錄細節。我有兩個創建的文本框和兩個按鈕名稱添加用戶並編輯用戶。當我在用戶成功添加到數據庫的兩個文本框中鍵入用戶名和密碼時,錯誤出現在編輯用戶中,我想根據用戶名更新用戶的密碼, 嘗試訪問時出現SQL錯誤更新用戶,java程序中的sql查詢錯誤

    這裏是我的SQL查詢來更新基於他的用戶名用戶的密碼,

    String sql = "UPDATE Admin SET password='"+JT_pass1.getText()+"' WHERE 
    username = "+JT_username1.getText(); 
    

    當我執行即時得到這個錯誤,

    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 
    'sss' in 'where clause' 
    

    「SSS」是我輸入的用戶名字段, Mysql數據庫我有管理表,其中包括兩列管理員和用戶名,

    我不知道我哪裏得到錯誤,請任何幫助將不勝感激。

    +0

    您正在'JT_username1.getText()'周圍引號缺失。更好:使用佔位符。 – kmkaplan

    +0

    您忘記了單引號'... WHERE用戶名='「+ JT_username1.getText()+」'「;' – Baby

    +1

    嘗試使用準備好的語句 – NewUser

    回答

    2

    爲了得到這個工作,你需要周圍的用戶名加引號,像這樣:

    String sql = "UPDATE Admin SET password='"+JT_pass1.getText()+"' WHERE 
    username = '"+JT_username1.getText()+"'"; 
    

    然而,更新數據庫這種方式很容易受到SQL injection,所以這將是更好的使用Prepared Statements

    +0

    謝謝先生,查詢現在正在工作 –

    1

    要將「JT_username1.getText()」作爲查詢字符串的一部分,必須將其包含在適當的引號下。 與在單引號和雙引號之間添加「JT_pass1.getText()」相同,您還必須添加「JT_username1.getText()」。

    String sql = "UPDATE Admin SET password='" + JT_pass1.getText() + "' WHERE username = '"+JT_username1.getText()+"'"; 
    
    4

    您的直接問題是您忘記在查詢中圍繞用戶名放置單引號。因此,該數據庫將sss解釋爲一列。但你應該真的在使用預處理語句:

    String query = "UPDATE Admin SET password=? WHERE username = ?"; 
    PreparedStatement update = con.prepareStatement(query); 
    update.setString(JT_pass1.getText()); 
    update.setString(JT_username1.getText()); 
    update.executeUpdate(); 
    

    使用預處理語句有很多優點。首先,它會自動處理字符串和其他類型數據的正確轉義。另外,它將防止SQL注入發生。

    相關問題