2011-12-21 2 views
1

내가 sqlite에서 문자 와일드 카드 "_"을 사용하려고하고 있는데, 조건이 "높은 곳에서 뛰기"에 가깝다. 나는 rawQuery와 다양한 쿼리를 모두 시도했다. 하드 및 소프트 코딩 된 매개 변수. 그것은 문자 와일드 카드 "_"을 무시하고 모든 행을 반환하거나 전혀 반환하지 않는 것 같습니다. 유지rawQuery 와일드 카드``_ '`not working

데이터가 오렌지 인 것을 의미하는 '01001000'이 될 수있는 열은 오브젝트

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

및 행의 색의 색상을 나타낼 수있는 예를 들어 oblect의 특징을 나타내는 여러 열이고 파란색이지만 빨간색, 노란색 등 다른 열에는 단일 문자가 들어 있습니다. 즉, 크기에 s, m 또는 l (작은, 중간, 큰 매핑)이 포함되어 있습니다. 데이터베이스는 각 유형의 여러 열을 보유하고 있으므로 가능한 한 데이터베이스를 압축해야합니다.

내 첫 번째 의도는 선택 항목의 '위치'를 문자열로 전달하여 사용자가 선택한 여러 기능에 대한 응답으로 코드에서 myselect가 컴파일 된 코드 인 rawQuery(myselect,null)에 전달하는 것입니다. 즉

mywhere 문자열을 반환하는 컴파일 - colour1을 "___1_01__" 및 크기와 같은 "_1__10__"과 컬러 2처럼 = "l" 을하고 rawQuery

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

에 전달 아래 잘 파이어 폭스의 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); 
(I이 예상)이

은 행을 반환하지만 모두 첫 행에 1을 갖지는 않습니다.

를 숯불하지만

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는의 스트링 분리 문자는 작은 따옴표 문자 (')가 아닌 큰 따옴표 하나 (") 인 경우

+0

dmon 감사합니다.나는 오라클 백그라운드에서 왔으며 "또는 '쌍이 SQLite에 있는지 여부에 관계없이 SQL의 문자열 구분 기호입니까? 예는 문자열을 구분하지 않고 작은 따옴표 (')를 삽입하는 것입니다. 당신은 위의 테스트를 '동일한 결과를 가진 select 문에서'를 사용하여 위의 테스트를 수행했습니다. String [] whereArguments = { '1_______'};에서는 Java가 금지하지만, 문서에서 rawQuery의 selectionArgs 값은 문자열로 바인딩됩니다. . – user1108608