2017-10-06 148 views
1
if (c.getQuery().contains("update") || c.getQuery().contains("delete") || c.getQuery().contains("truncate") 
      || c.getQuery().contains("drop")) { 
     throw new MensagemException(Mensagens.getMensagem("Only select is allowed")); 

我有這個簡單的代碼,檢查字符串查詢。但它只能檢查小寫字母,我能做些什麼來確認任何大寫字母而不用一遍又一遍地寫出這些字符?如何檢查字符串上的某些單詞?

+1

使用'compareToIgnoreCase' – Dimitri

+0

@Dimitri那就沒辦法了因爲OP的意圖不是要比較整個字符串 –

+0

此問題重複 https://stackoverflow.com/questions/17134773/to-check-if-string-contains-particular-word 和https:// stackoverflow。 com/questions/86780/how-to-check-if-a-string-contains-another-string-in-a-case-insensitive-manner -in – 2017-10-06 13:41:43

回答

3

不幸的是,Java字符串沒有containsIgnoreCase方法。解決此問題的方式是將輸入轉換爲小寫字母(或大寫,你挑),並檢查是否有小寫的話你要搜索:

String toSearch = c.getQuery().toLowerCase(); 
if (toSearch.contains("update") || 
    toSearch.contains("delete") || 
    toSearch.contains("truncate") || 
    toSearch.contains("drop")) { 
     throw new MensagemException 
      (Mensagens.getMensagem("Only select is allowed")); 
} 
+0

我相信這個答案是錯的。這個問題肯定是一個XY問題的例子;您不檢查SQL查詢是否通過在其他SQL關鍵字上使用「包含」來進行選擇。只要表中的任何字段包含其中一個字符串(例如,從mytable中選擇updated_on),此答案就會中斷。最好你可以使用startsWith並假定只有一個查詢正在執行,但試圖解決「我如何檢測非選擇SQL查詢」肯定是真正的問題,而不是他們提出的問題。 – adamcooney

0

我會做一些改進:

final String cQuery = c.getQuery(); // retrieve only once 
// check null, convert query to lower case so case won't matter anymore 
final String cQueryLower = cQuery == null ? null : cQuery.toLowerCase(); 
if (cQueryLower.contains("update") || cQueryLower.contains("delete") || cQueryLower.contains("truncate") || cQueryLower.contains("drop")) { 
    throw new MensagemException(Mensagens.getMensagem("Only select is allowed")); 
} 

你可以試試這個太:if (!cQueryLower.contains("select"))

0

你可以使用toLowerCase()這樣你就可以檢查大寫和小寫的所有變種小寫

if (c.getQuery().toLowerCase().contains("update") || c.getQuery().toLowerCase().contains("delete") || c.getQuery().toLowerCase().contains("truncate") 
      || c.getQuery().toLowerCase().contains("drop")) { 
     throw new MensagemException(Mensagens.getMensagem("Only select is allowed")); 

我的意思是它必須像這樣工作。我沒有測試它

0

您可以將您的字符串爲小寫,然後讓你在做同樣的事情,應該是這樣的:

String queryToLowerCase = c.getQuery().toLowerCase(); 
if (queryToLowerCase .contains("update") || queryToLowerCase .contains("delete") 
     || queryToLowerCase .contains("truncate") || queryToLowerCase .contains("drop")) { 
    throw new MensagemException(Mensagens.getMensagem("Only select is allowed")); 
相關問題