2010-12-10 5 views
0

J'utilise sqllite pour mon module de recherche.J'ai sélectionné plusieurs valeur de statut dans sqllite en utilisant le code ci-dessous.L'erreur est survenue lors de l'exécution. pls help me .......Comment faire pour sql erreur de requête sql

Erreur:

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) 

Mon code:

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

J'ai ajouté des notes sur votre deuxième problème à ma réponse. –

Répondre

1

Il ne pouvait pas être plus évident, peut-il?

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

Cette citation unique à la fin est une erreur de syntaxe SQL.

+0

Je dois changer ci-dessous erreur survenue ....... 12-10 12: 47: 47.057: ERROR/AndroidRuntime (1460): android.database.sqlite.SQLiteException: pas une telle colonne: NOUVEAU:, lors de la compilation: sélectionnez * à partir de problèmes où État IN (CLO, NEW) 12-10 12: 47: 47.057: ERROR/AndroidRuntime (1460): à android.database.sqlite.SQLiteProgram.native_compile (Méthode native) – user533787

+0

@ user533787: Je savais que vous étiez va dire ça. Pourquoi assembler une requête brute si vous ne connaissez même pas SQL? Trop peu de connaissances en SQL conduiront à des vulnérabilités d'injection SQL. Concernant votre problème: "CLO" et "NEW" doivent évidemment être écrits comme des chaînes, par ex. 'WHERE statut IN ('CLO', 'NOUVEAU')'. Martin Clayton a une solution dans sa réponse, mais vous ne devriez pas copier-coller du code à moins que vous ne le compreniez! – AndiDog

+0

Merci ... Maintenant, je suis en train d'implémenter votre code ex c'est correct de travailler ....... – user533787

0

Vous avez une erreur à la ligne suivante:

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

Retirez + "'" après la builder.toString().

Cordialement, Mahendra Liya.

+0

J'ai un changement mais en dessous de l'erreur occred .................. ................. 12-10 12: 47: 47.057: ERROR/AndroidRuntime (1460): android.database.sqlite.SQLiteException: aucune colonne de ce type: NEW:, lors de la compilation : sélectionnez * à partir de problèmes où État IN (CLO, NEW) 12-10 12: 47: 47.057: ERROR/AndroidRuntime (1460): à android.database.sqlite.SQLiteProgram.native_compile (Méthode native) – user533787

+0

pouvez-vous préparer une chaîne variable de votre requête et l'affiche dans le journal. Il semble y avoir un problème avec la requête finale qui est préparée dynamiquement .. Il suffit de coller le résultat de la variable de chaîne ici à partir du logcat .. –