2011-12-21 28 views
1

私は、条件が"高いところから飛び降りる "に近い文字ワイルドカード"_"を使用しようとしています。私はrawQueryとさまざまなクエリを試しました硬質および軟質のコード化されたパラメータ。キャラクターワイルドカード"_"を無視して、すべての行を返すか、まったく返しません。保持rawQueryワイルドカード `` _ '`not working

データは、それがオレンジ色であることを意味する列がオブジェクト

("red,orange,yellow,green,blue,indego,violet,black") 

の色を表すことができ、行の色は「01001000」とすることができる、例えばoblectの特徴を表すいくつかの列にあり、青、赤、黄などではありません。他の列には、1つの文字が含まれます。サイズには、s、mまたはl(マッピングの小、中、大)が含まれます。

私の最初の意図は、選択した文字の「どこに」をrawQuery(myselect,null)に渡してコードすることでした。ここで、myselectは、ユーザーが選択したいくつかの機能に対応してコードでコンパイルされました。 = "l" "___1_01__"よう"_1__10__"とcolour2などのcolour1とサイズと以下の文は、罰金FirefoxのSQLiteのマネージャ

を使用して動作しますrawQuery

db.rawQuery("SELECT _id , name FROM widgets WHERE " + mywhere , null); 

に渡さ - :

すなわちmywhere文字列を返すようにコンパイルされています

SELECT _id , name FROM widgets WHERE colour1 like "_1__10_" and colour2 like "__1_01___" and size ="m" 

調査するために、where句の1つの列にクエリを切り詰めました

myselect ="SELECT _id ,name,FROM widgets where colour1 like \"1_______\""; 
cursor = db.rawQuery(myselect,null); 

返さない行

myselect ="SELECT _id ,name,FROM widgets where colour1 like \"%1_______%\""; 
cursor = db.rawQuery(myselect,null); 

戻り行が、全て

myselect ="SELECT _id ,name, FROM widgets where colour1 like ?"; 
String[] whereArguments = { "1_______" }; 
cursor = db.rawQuery(myselect,whereArguments); 

返さない行

myselect ="SELECT _id ,name, FROM widgets where colour1 like ?"; 
String[] whereArguments = { "%1_______%" }; 
cursor = db.rawQuery(myselect,whereArguments); 
(私はこれを期待される)最初の文字に1を持っていません

は行を返しますが、すべてが最初に1を持っているわけではありません

をchar型しかし、私は

myselect ="SELECT _id ,name, FROM widgets where colour1 like ?"; 
String[] whereArguments = { "10000000" }; 
cursor = db.rawQuery(myselect,whereArguments); 

から任意の行を取得いけないし、「10000000」

を含む行があるいずれかの任意のソリューションを持っていますか?私は検索しようとしましたが、それはrawQueryとクエリがAndroidで疑わしい機能を持っているようです。

+0

。例えば、thisを参照してください。必ず私が見つけているわけではありません私の問題FirefoxのSQLite Managerで作成したデータをAndroidのSQLiteデータベースにエクスポートして、各カラムにスペースが追加されていることに気が付かずに、 "10000000"というデータが実際に "10000000" – user1108608

答えて

1

これが問題のあなたの主な情報源ですが、SQLiteの中の文字列の区切り文字は、単一引用符( ')ではない二重引用符の1( ")であれば

+0

dmonありがとうございました。私はOracleの背景から来て、 "または"のペアがSQLiteの中にあるかどうかにかかわらずSQLの文字列区切り文字であるという印象を受けています。あなたの例は、文字列の区切りではなく、一重引用符( ')を埋め込むものです。あなたは正しいです上記のテストを '同じ結果を持つselect文を使用して実行しましたが、String [] whereArguments = {' 1_______ '};ではJavaでは禁止されていますが、rawQueryのselectionArgs値が文字列としてバインドされていることをドキュメントから理解しています。 – user1108608