2012-12-26 34 views
1

請讓我知道爲什麼我的where子句不起作用。我嘗試使用查詢而不是rawquery,但沒有運氣。Android SQLite查詢:WHERE子句出現問題

try { 
     String categoryex = "NAME"; 
     DBHelper dbHelper = new DBHelper(this.getApplicationContext()); 
     MyData = dbHelper.getWritableDatabase(); 

     Cursor c = MyData.rawQuery("SELECT * FROM " + tableName + where Category = '+categoryex'" , null); 
     if (c != null) { 
      if (c.moveToFirst()) { 
       do { 
        String firstName = c.getString(c.getColumnIndex("Category")); 
        String age = c.getString(c.getColumnIndex("Text_Data")); 
        results.add( firstName + " Directions: " + age); 
       }while (c.moveToNext()); 
      } 
     }   
    } catch (SQLiteException se) { 
     Log.e(getClass().getSimpleName(), "Could not create or Open the database"); 
    } finally { 
     if (MyData != null) 
      MyData.execSQL("DELETE FROM " + tableName); 
      MyData.close(); 
    } 
+0

有什麼問題 –

+1

使用查詢。記錄你的例外。發佈您的預期/實際結果 – njzk2

回答

8

嘗試......(你where之前留下了一個雙引號

Cursor c = MyData.rawQuery("SELECT * FROM " + tableName + " where Category = '" +categoryex + "'" , null); 
2

你的報價是累垮:

Cursor c = MyData.rawQuery("SELECT * FROM " + tableName + " where Category = '" + categoryex + "'" , null); 

你也應該SQL injection攻擊閱讀起來。

+0

非常感謝.. :)我感謝您的幫助。有一段時間以來一直在挖這個。我希望我能接受你的答案! – buggydroid

9

我認爲你應該在這種形式下使用rawQuery

rawQuery("SELECT * FROM ? where Category = ?", new String[] {tableName, categoryex}); 

我認爲這樣更安全。

1

如果使用這種技術而不是rawQuery,它會更容易,它的簡單方法就是相應地更改表名,列和條件。

public ArrayList<Invitees> getGroupMembers(String group_name) { 

    ArrayList<Invitees> contacts = new ArrayList<>(); 

    SQLiteDatabase db = this.getReadableDatabase(); 

    String[] projection = {COLUMN_CONTACT, COLUMN_PHONE_NUMBER}; 

    String selection = COLUMN_GROUP_NAME + "=?"; 

    String[] selectionArgs = {group_name}; 

    Cursor cursor = db.query(GROUPS_TABLE_NAME, projection, selection, selectionArgs, null, null, null); 

    if (cursor.moveToFirst()) { 

     do { 
      Invitees invitees = new Invitees(); 

      invitees.setUserName(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_CONTACT))); 

      invitees.setInviteePhone(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_PHONE_NUMBER))); 

      contacts.add(invitees); 

     } while (cursor.moveToNext()); 

    } 
    return contacts; 
}