2012-08-23 63 views
0

我想查詢我的SQLite數據庫並隔離發送到遊標的數據集。每個記錄都有一個顏色字段,我想查詢我的數據並返回特定的顏色。自定義查詢上的Android SQLite無法識別的令牌

當我運行它,我得到一個SQLiteException:無法識別的記號 「紅」

這是我到目前爲止有:

public Cursor getGroupRecords(String color) { 
    Cursor mCursor = db.query(DATABASE_TABLE, DATABASE_STRUCTURE, 
      KEY_COLOR + "=" + color, null, null, null, null, null); 
    if (mCursor != null) { 
     mCursor.moveToFirst(); 
    } 
    return mCursor; 
} 

這裏是我的logcat:

08-23 13:52:00.560: D/szipinf(14301): Initializing inflate state 
08-23 13:52:00.560: D/szipinf(14301): Initializing zlib to inflate 
08-23 13:52:00.970: I/Database(14301): sqlite returned: error code = 1, msg = no such column: red 
08-23 13:52:00.980: D/AndroidRuntime(14301): Shutting down VM 
08-23 13:52:00.980: W/dalvikvm(14301): threadid=1: thread exiting with uncaught exception (group=0x2aac0560) 
08-23 13:52:00.990: E/AndroidRuntime(14301): FATAL EXCEPTION: main 
08-23 13:52:00.990: E/AndroidRuntime(14301): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cca.pqr/com.cca.pqr.PQRActivity}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cca.pqr/com.cca.pqr.PQRListActivity}: android.database.sqlite.SQLiteException: no such column: red: , while compiling: SELECT _id, Color, Class, Subclass, Item, Value, Other, Remarks FROM PQR WHERE Color=red 
08-23 13:52:00.990: E/AndroidRuntime(14301): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
08-23 13:52:00.990: E/AndroidRuntime(14301): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
08-23 13:52:00.990: E/AndroidRuntime(14301): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
08-23 13:52:00.990: E/AndroidRuntime(14301): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
08-23 13:52:00.990: E/AndroidRuntime(14301): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-23 13:52:00.990: E/AndroidRuntime(14301): at android.os.Looper.loop(Looper.java:123) 
08-23 13:52:00.990: E/AndroidRuntime(14301): at android.app.ActivityThread.main(ActivityThread.java:3683) 
08-23 13:52:00.990: E/AndroidRuntime(14301): at java.lang.reflect.Method.invokeNative(Native Method) 
08-23 13:52:00.990: E/AndroidRuntime(14301): at java.lang.reflect.Method.invoke(Method.java:507) 
08-23 13:52:00.990: E/AndroidRuntime(14301): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
08-23 13:52:00.990: E/AndroidRuntime(14301): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
08-23 13:52:00.990: E/AndroidRuntime(14301): at dalvik.system.NativeStart.main(Native Method) 
08-23 13:52:00.990: E/AndroidRuntime(14301): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cca.pqr/com.cca.pqr.PQRListActivity}: android.database.sqlite.SQLiteException: no such column: red: , while compiling: SELECT _id, Color, Class, Subclass, Item, Value, Other, Remarks FROM PQR WHERE Color=red 

任何建議或幫助將不勝感激。提前致謝!

UPDATE 這裏是工作代碼:

public Cursor getGroupRecords(String color) { 

    final String SELECTION = KEY_COLOR + "=?"; 
    final String[] SELECTION_ARGS = { color }; 

    Cursor mCursor = db.query(DATABASE_TABLE, DATABASE_STRUCTURE, 
      SELECTION, SELECTION_ARGS, null, null, null, null); 
    if (mCursor != null) { 
     mCursor.moveToFirst(); 
    } 
    return mCursor; 
} 
+0

有啥問題? –

+0

我更新了我的問題,但我得到一個SQLiteException:無法識別的令牌「紅色」 – wyoskibum

+0

好的。謝謝。如果我們知道內容是什麼,這將有所幫助。看起來你的查詢格式不正確。而且,我不相信你需要所有那些額外的空值。您應該能夠像6一樣停下來。嘗試使用您可以找到的最細微的查詢方法。 (純粹的風格和可讀性的原因) –

回答

1

呀。您構建查詢的方式有問題。看看這個例子。

public static Cursor getItemWithColor(ContentResolver contentResolver, String color) { 
    Uri uri = My.Table.CONTENT_URI; 

    final String[] PROJECTION = { 
      My.Table._ID, My.Table.COLOR 
    }; 

    final String SELECTION = My.Table.COLOR + "=?"; 

    final String[] SELECTION_ARGS = { 
      color 
    }; 

    Cursor cursor = contentResolver.query(uri, PROJECTION, SELECTION, SELECTION_ARGS, null); 

    return cursor; 
} 
+1

感謝您的幫助!那就是訣竅! – wyoskibum

+0

如果你真的很高興你可以upvote太:) –

0

我剛纔有這個問題,發現它可以通過在引號中包含選擇參數來解決。只使用標準選擇參數字段似乎不適用於包含數字和字母的值。

所以結果查詢將是:

db.query(DATABASE_TABLE, DATABASE_STRUCTURE, 
     KEY_COLOR + "=\"" + color+"\"", null, null, null, null, null); 
相關問題