2017-04-07 42 views
2

只是尋求一些幫助,JAVA中的SQL語法形式getText();

在Java中創建一個應用程序,並使用一個JTable來收集來自myphp數據庫中的數據,我使用插入,更新和刪除SQL命令,使用戶能夠在表中操縱數據。

刪除工作完美,但是我有一些麻煩,我的更新和插入命令,只是想知道如果任何人都可以看到我是否使用(「'+)不正確,我不像老鷹眼睛更像有經驗的人,所以只是看到如果有人能提供一些線索:)

感謝

插入代碼:

String query = "INSERT INTO `supplier`(`Company Name`, `Contact`, `Address`, `Postcode`, `Phone`) VALUES ('"+jTextField_SupplierCompany.getText()+"','"+jTextField_SupplierContact.getText()+"',"+jTextField_SupplierAddress.getText()+"','"+jTextField_SupplierPostcode.getText()+"',"+jTextField_SupplierPhone.getText()+")"; 

更新代碼:

String query = "UPDATE `supplier` SET `Company Name`='"+jTextField_SupplierCompany.getText() + "',`Contact`='"+jTextField_SupplierContact.getText() + "',`Address`="+jTextField_SupplierAddress.getText() + "',`Postcode`="+jTextField_SupplierPostcode.getText() + "',`Phone`="+jTextField_SupplierPhone.getText() + " WHERE `ID` = "+jTextField_SupplierID.getText(); 

錯誤:

錯誤是扔在「UPDATE」語句的WHERE子句中的濫用......可能是顯而易見的一些然而不能讓我的頭周圍。

+2

請學會用'PreparedStatement' –

回答

4

爲了避免這些類型的語法錯誤,或任何SQL注入,你可以使用PreparedStatement的,相反,它是如此簡單,如此helful:

String query = "INSERT INTO `supplier`(`Company Name`, `Contact`, `Address`, `Postcode`, `Phone`) " 
    + "VALUES (?, ?, ?, ?, ?)"; 
try (PreparedStatement pstm = conn.prepareStatement(query)) { 
    pstm.setString(1, jTextField_SupplierCompany.getText()); 
    pstm.setString(2, jTextField_SupplierContact.getText()); 
    pstm.setString(3, jTextField_SupplierAddress.getText()); 
    pstm.setString(4, jTextField_SupplierPostcode.getText()); 
    pstm.setString(5, jTextField_SupplierPhone.getText()); 

    pstm.executeUpdate(); 
} 

你的錯誤發生,因爲你忘了關閉與''您的字符串檢查您的查詢,您將看到:

+"', " + jTextField_SupplierAddress.getText() + "' 
//--^--------------------------------------------^ 
+0

歡迎你@ Tipping44享受 –

+0

我說話很快, 不知道我剛剛做,它拋出一個錯誤, 可我只是確認東西時,(查詢)我的情況是(「INSERT INTO?,?,VALUES(jTextField_SupplierCompany.getText(),?,?,) 我不知道爲什麼,它更新db中的兩個字段,但沒有更多:/ – Tipping44

+0

沒有檢查我的編輯@ Tipping44 –

0

您在查詢未接的單引號

使用這種在SERT

串查詢=「INSERT INTO supplierCompany NameContactAddressPostcodePhone)VALUES( ' 「+ jTextField_SupplierCompany.getText()+」', ' 「+ jTextField_SupplierContact.getText()+」', ' 「+ jTextField_SupplierAddress.getText()+」', ' 「+ jTextField_SupplierPostcode.getText()+」', ' 「+ jTextField_SupplierPhone.getText()+」')「;

用這個更新

查詢字符串= 「UPDATE '供應商' SET「公司名稱='"+jTextField_SupplierCompany.getText() + "',聯繫='"+jTextField_SupplierContact.getText() + "',地址='"+jTextField_SupplierAddress.getText() + "',郵編='"+jTextField_SupplierPostcode.getText() + "',電話='"+jTextField_SupplierPhone.getText() + "' WHERE ID` = ' 」+ jTextField_SupplierID.getText()+「'」 ;

+0

-1對於仍然會讓用戶打開SQL注入的答案,甚至不會打擾你的帖子正確格式化。 –

+1

爲避免SQL注入然後準備好語句更好地使用... –

+0

正是!如果你知道這一點,那麼爲什麼不根據你的答案,而不是回答一個小問題的解決方案,留下一個大的安全漏洞。 –