2011-06-19 22 views
8

Ormlite for Android用の文字列をエスケープするネイティブな方法はありますか?Ormliteエスケープ文字列メソッド?

たとえば、string:ormliteのエスケープfuncを指定する場合は、ormliteのエスケープfuncとして指定する必要があります。

TestDao.queryForFirst(TestDao.queryBuilder().where().like("stats", stats) 
    .prepare()) 

私はUpdateBuilderのescapeValueメソッドを使用してみましたが、それだけで次のように変更になり: 'ormliteの脱出funcを'。文の先頭と末尾に一重引用符を追加します。 SQLインジェクションセーフであるために文字列をエスケープするネイティブサポートはありますか?

そうでない場合は、どうすればよいですか?

ありがとうございました!

+0

月'' like() ''の最初の文字列 - 潜在的な注入セキュリティの欠如? – unlimited101

答えて

15

私はUpdateBuilderのescapeValueメソッドを使用してみましたが、 'ormlite's escape func'という変更のみを行いました。文の先頭と末尾に一重引用符を追加します。 SQLインジェクションセーフであるために文字列をエスケープするネイティブサポートはありますか?

これはよくある質問です。これを行う適切な方法は、SelectArg引数を使用して、SQLが?を使用できるようにすることです。構造のタイプ。別のquestion talking about thisがあります。

SelectArg selectArg = new SelectArg(stats); 
TestDao.queryForFirst(
    TestDao.queryBuilder().where().like("stats", selectArg).prepare()); 

ここで選択し、引数の機能上のドキュメントです:

http://groups.google.com/group/ormlite-dev/browse_thread/thread/71d07202404f97e7

http://ormlite.com/docs/select-arg

そして、ここではORMLiteユーザリストにこのことについていくつかの議論です

http://groups.google.com/group/ormlite-user/browse_thread/thread/7ced95c474031e3c

編集:@Moritzが指摘するように、あなたが実際にデータベースを更新する場合

は、あなたもUpdateBuilderSelectArgを使用することができます。

SelectArg arg = new SelectArg("Some value"); 
updateBuilder.updateColumnValue(MY_COLUMN, arg); 
+0

パーフェクト、それは働いた。ありがとうございました。 – the5threvolution

+1

これは更新ステートメントでも動作します: 'SelectArg arg = new SelectArg(); arg.setValue( "Some value"); updateBuilder.updateColumnValue(MY_COLUMN、arg); ' – Moritz

関連する問題