2010-12-10 8 views
0

내 검색 모듈에 sqllite를 사용하고 있습니다. 아래 코드를 사용하여 sqllite에서 여러 상태 값을 선택합니다. 런타임에 오류가 발생합니다. PLS 도와 .......아래 SQL 쿼리 오류 방법

오류 :

12-10 12:31:56.686: ERROR/AndroidRuntime(848): Uncaught handler: thread main exiting due to uncaught exception 
12-10 12:31:56.686: ERROR/AndroidRuntime(848): android.database.sqlite.SQLiteException: unrecognized token: "'": , while compiling: select * from issues where Status IN (CLO,NEW)' 
12-10 12:31:56.686: ERROR/AndroidRuntime(848):  at android.database.sqlite.SQLiteProgram.native_compile(Native Method) 
12-10 12:31:56.686: ERROR/AndroidRuntime(848):  at android.database.sqlite.SQLiteProgram.compile(SQLiteProgram.java:110) 
12-10 12:31:56.686: ERROR/AndroidRuntime(848):  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59) 
12-10 12:31:56.686: ERROR/AndroidRuntime(848):  at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49) 
12-10 12:31:56.686: ERROR/AndroidRuntime(848):  at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:49) 
12-10 12:31:56.686: ERROR/AndroidRuntime(848):  at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1118) 
12-10 12:31:56.686: ERROR/AndroidRuntime(848):  at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1092) 
12-10 12:31:56.686: ERROR/AndroidRuntime(848):  at ez.com.Action_module_screen.setListval1(Action_module_screen.java:1062) 
12-10 12:31:56.686: ERROR/AndroidRuntime(848):  at ez.com.Action_module_screen$4.handleMessage(Action_module_screen.java:695) 
12-10 12:31:56.686: ERROR/AndroidRuntime(848):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-10 12:31:56.686: ERROR/AndroidRuntime(848):  at android.os.Looper.loop(Looper.java:123) 
12-10 12:31:56.686: ERROR/AndroidRuntime(848):  at android.app.ActivityThread.main(ActivityThread.java:4203) 
12-10 12:31:56.686: ERROR/AndroidRuntime(848):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-10 12:31:56.686: ERROR/AndroidRuntime(848):  at java.lang.reflect.Method.invoke(Method.java:521) 
12-10 12:31:56.686: ERROR/AndroidRuntime(848):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
12-10 12:31:56.686: ERROR/AndroidRuntime(848):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
12-10 12:31:56.686: ERROR/AndroidRuntime(848):  at dalvik.system.NativeStart.main(Native Method) 

내 코드 :

String sta=Search.status2; 
String doc=Search.document; 
String[] items=sta.split(","); 

String statusFilter = " Status IN (" + items[0]; 
StringBuilder builder = new StringBuilder(statusFilter); 
for (int j = 1; j < items.length; j++) { 
    builder.append(","); 
    builder.append(items[j]); 
} 
builder.append(')'); 

    Cursor dbcur = myDB.rawQuery("select * from "+TABLE_NAME+" where " + builder.toString() + "'", null); 
    if(dbcur.moveToFirst()) 
    { 
     int k=0; 
     System.out.println("enter first"); 
     do 
     { 
     String title1=dbcur.getString(dbcur.getColumnIndex("Title")); 
     System.out.println("title"+title1); 
     String name1=dbcur.getString(dbcur.getColumnIndex("Name")); 
     System.out.println("name"+name1); 
     String open1=dbcur.getString(dbcur.getColumnIndex("Open")); 
     System.out.println("open"+open1); 
     String close1=dbcur.getString(dbcur.getColumnIndex("Close")); 
     System.out.println("close"+close1); 
     String no1=dbcur.getString(dbcur.getColumnIndex("No")); 
     System.out.println("no"+no1); 
     no.add(no1+","+k); 
    first.put(no1+","+k, title1); 
    second.put(no1+","+k,name1); 
    third.put(no1+","+k, open1); 
    fourth.put(no1+","+k,close1); 
    k=k+1; 
    mylist=sorting(no,1,true); 
     }while(dbcur.moveToNext()); 
      } 
    dbcur.close(); 
    myDB.close(); 
+0

내 대답에 두 번째 문제에 대한 메모를 추가했습니다. –

답변

1

그것은 더 명확하지 않을 수 있습니다, 그것은 할 수 있습니까?

SQLiteException: unrecognized token: "'": , while compiling: select * from issues where Status IN (CLO,NEW)'

끝에 작은 따옴표가 SQL 구문 오류인지 확인하십시오.

+0

아래 오류가 발생했습니다 ....... 12-10 12 : 47 : 47.057 : ERROR/AndroidRuntime (1460) : android.database.sqlite.SQLiteException : 해당 열 없음 : NEW :, 컴파일 중 : select * 문제가있는 곳에서 상태 IN (CLO, NEW) 12-10 12 : 47 : 47.057 : ERROR/AndroidRuntime (1460) : android.database.sqlite.SQLiteProgram.native_compile (기본 메소드) – user533787

+0

@ user533787 : 이것을 말할 것입니다. SQL을 모르더라도 원시 쿼리를 왜 어셈블하고 있습니까 ?? SQL에 대한 지식이 너무 적 으면 SQL 주입 취약점이 발생할 수 있습니다. 문제에 관해서 : 'CLO'와 'NEW'는 분명히 문자열로 써야합니다. '어디에서 status ('CLO', 'NEW')'. Martin Clayton은 자신의 대답에 대한 해결책을 가지고 있지만, 이해하지 못한다면 코드를 복사해서는 안됩니다! – AndiDog

+0

고맙습니다 ... 이제는 전 코드를 구현하고 있습니다. corrctly ....... – user533787

0

당신은 다음 줄에 오류가 있습니다

Cursor dbcur = myDB.rawQuery("select * from "+TABLE_NAME+" where " + builder.toString() + "'", null); 

가 builder.toString 후 + "'" 을 제거합니다().

감사합니다. Mahendra Liya.

+0

변경되었지만 오류가 발생했습니다 .................. ................. 12-10 12 : 47 : 47.057 : ERROR/AndroidRuntime (1460) : android.database.sqlite.SQLiteException : 해당 열 없음 : NEW :, 컴파일 중 : select * from issues 여기서 상태 IN (CLO, NEW) 12-10 12 : 47 : 47.057 : ERROR/AndroidRuntime (1460) : android.database.sqlite.SQLiteProgram.native_compile (기본 메소드) – user533787

+0

문자열을 준비 할 수 있습니까? 변수를 검색하여 로그에 출력하십시오. 동적으로 준비된 최종 쿼리에 문제가있는 것 같습니다. 여기에 logcat의 문자열 변수 결과를 붙여 넣으십시오. –