2011-12-21 71 views
1

我一直試圖使用字符通配符"_"在sqlite的條件和接近「跳出高位」我已經嘗試了rawQuery和查詢各種硬編碼參數和軟編碼參數。它似乎忽略了字符通配符"_"並返回所有行或根本沒有。rawQuery通配符`「_」`不工作

保持的數據是在表示oblect的特徵例如一列可以表示對象

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

和行的顏色的顏色數列可以是「01001000」,這意味着它是橙色和藍色但不是紅色,黃色等。其他列包含單個字符,即大小包含s,m或l(映射小,中,大),數據庫包含每種類型的多個列,這種想法儘可能具有緊湊的數據庫。

我的第一個意圖是通過將我的select的'where'作爲字符串傳遞給rawQuery(myselect,null),其中mySelect在代碼中被編譯以響應用戶選擇的幾個特徵。 即

的mywhere字符串被編譯返回: - colour1像"_1__10__"和顏色2像"___1_01__"和大小= "l" 並傳遞給rawQuery

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

以下工作正常使用Firefox的SQLite的經理

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

爲了調查我已經將查詢降低到where子句中的一列

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); 

返回行,但不是全部具有1的第一個字符(我預期這個)

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炭

但我不從

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

得到任何行,也有含「10000000」

是否有任何人有任何解決方案行?我嘗試過搜索,但似乎rawQuery和查詢在Android中有可疑的功能。

+0

我發現我的問題!我導出了我在Firefox的SQLite管理器中創建的數據,以在Android中創建SQLite數據庫,但沒有意識到每一列的每一端都附加了一個空格,所以我認爲數據中包含「10000000」,實際上它保存着「10000000」 – user1108608 2011-12-22 14:57:39

回答

1

不知道這是你的問題的主要來源,但在SQLite的字符串分隔符是單引號(')而不是雙引號一個(「)。參見this,例如。

+0

dmon謝謝。我來自Oracle的背景,並且我的印象是,「或」對是SQL中的字符串分隔符,無論它是否在SQLite中?您的示例是嵌入單引號(')而不是分隔字符串。你是正確的我在String [] whereArguments = {'1_______'}中使用'執行上面的測試'在select語句中獲得了相同的結果:Java禁止';但是我從文檔中明白rawQuery的selectionArgs值綁定爲字符串。 – user1108608 2011-12-22 13:24:25