2015-01-15 60 views
1

我有這樣的代碼部分爲:現在我可以連接我的包含數據的字符串與mysql查詢嗎?

String t = (tname2.getText()); 
    String h = (value2.getText()); 

    PreparedStatement ps ; 

    if(h.length()>2) 
    { 
     ps = con.prepareStatement("DELETE FROM "+t+" where empname = "+ h); 
     //ps.setString(2,h); 
     ps.executeUpdate(); 
      JOptionPane.showMessageDialog(null, "Record deleted !", "Confirmation", JOptionPane.INFORMATION_MESSAGE); 
    } 

,行ps = con.prepareStatement("DELETE FROM "+t+" where empname = "+ h);不工作。它用另一種方式使用「?」。像"Delete * from "+ t +" where empname =?"; 然後設置empname的值。我想知道,如果有一種方法,我可以使用我的empname與查詢串接來完成任務?有人可以提供一些提示嗎? `

+2

什麼是使用_prepared語句_然後連接查詢字符串的原因? – Seelenvirtuose

+0

其實我用準備好的語句的方式來使用它,但是它一直給我造成一個我無法跟蹤的錯誤。所以我轉向了另一種方式。 –

+1

在SQL中,字符串需要放在'''內,否則它會認爲你有一個字段名或關鍵字。 –

回答

4

利用PreparedStatement與參數化查詢和設置的值。
這種使用也會防止SQL注入。
因爲將值連接到查詢中容易受到SQL注入的影響。

例如。

ps = con.prepareStatement("DELETE FROM "+t+" where empname = ?"); 
psmt.setString(1, h); 
+0

你不能爲對象(表)名稱使用參數,只能用於值,所以你需要刪除第一個參數並用連接代替(最好是白名單檢查) –

+0

@馬克Rotteveel。感謝您的評論。答案編輯。 –

1

試試這個:

ps = con.prepareStatement("DELETE FROM "+t+" where empname = '"+ h + "'"); 
+0

哇!有效。謝謝。你能解釋一下工作嗎? –

+0

,因爲查詢應該在「開始」和「結束」之間。 –

+0

你在數據庫中搜索一個字符串,所以你必須用'或'括起你的字符串 如果你搜索一個數字,你不需要那樣做 我覺得Ye Win的答案更好,因爲它避免SQL注入 – Biber

相關問題