2

私はSQLiteとAndroidの初心者なので、明らかな何かが欠けているのかもしれません。

「AAABBB」という形式の重要なSQLiteデータベースクエリにスペースを含むパラメータを渡す方法を知っている人はいますか?

パラメータが選択文字列に置き換えられる場所を一重引用符で囲むなど、明らかなことをすべて試しました。

実際に「AAABBB」を選択文字列にハードコーディングしようとしましたが、それでも機能しません。それは、より複雑なクエリの一部としてではなく、単純な生のクエリレベルで機能します。

つまり、単純なSELECTrawクエリとして実行したいクエリを実行する方法がないようです。サブクエリを生のクエリにフィードしようとしましたが、パラメータにスペースがある場合を除いて、実行したいすべてのことを実行します。生のクエリとして使用されるのと同じサブクエリは、スペースを含むパラメータを正しく処理します(一重引用符が追加された場合)。

クエリは複数のテーブルを使用するため、db.Queryはオプションではありません。

だから今私はBuildQueryStringを使用して、それをrawQueryにフィードしています。同じ話。'"AAABBB"'文字列をBuildQueryStringへの入力に直接ハードコーディングした場合でも。BuildQueryStringの結果を使用する他の方法はありますか?

誰もがこれを行う方法を知っていますか?

4

1 に答える 1

3

やりたいことの例を次に示します。

database.rawQuery("SELECT bar FROM Foo WHERE bar = 'AAA BBB'", null);

SQL インジェクションが脅威で、「AAA BBB」が含まれている場合String myName:

database.rawQuery("SELECT bar FROM Foo WHERE bar = ?", new String[] { myName });

しかし、「より複雑なレベルで」が何を意味するのかはわかりません...おそらくこれ:

database.rawQuery("SELECT bar FROM Foo WHERE bar LIKE ? ORDER BY bar = ?, bar LIKE ?, bar LIKE ?", new String[] { myName, myName, myName + "%", "%" + myName + "%" });
于 2012-06-18T19:17:34.687 に答える