2017-10-06 19 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-case-insensitive-manner-inの文字列 –

答えて

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キーワードで 'contains'を使用してSQLクエリがselectであるかどうかをチェックしません。この回答は、テーブルのいずれかのフィールドにこれらの文字列のいずれかが含まれるとすぐに破棄されます(たとえば、mytableからupdated_onを選択)。 startWithを使用して1つのクエリしか実行されていないと仮定しても、「選択されていない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()ので、あなたが小文字

で、大文字と小文字のすべての亜種を確認することができます使用することができます

私はそれがこのように動作しなければならないことを意味します。私はあなたがこのようにする必要があり、ケースを下げた後、あなたがやっているのと同じ事を保つために、あなたの文字列を変換することができ、それを

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")); 
関連する問題