1

Please let me know why my where clause isn't working. I tried using the query instead of rawquery but no luck.

    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();
    }   
4

4 に答える 4

9

rawQueryこの形式で使用する必要があると思います:

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

こっちの方が安全だと思います。

于 2012-12-26T14:46:07.977 に答える
8

試してください... ( where.

Cursor c = MyData.rawQuery("SELECT * FROM " + tableName + " where Category = '" +categoryex + "'" , null);
于 2012-12-26T14:31:04.343 に答える
2

あなたの引用符は盗聴されています:

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

また、 SQL インジェクション攻撃についても読む必要があります。

于 2012-12-26T14:33:02.627 に答える
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;
}
于 2015-08-11T10:54:43.510 に答える