Может кто-нибудь сказать мне, что не так в этом? - PullRequest
0 голосов
/ 29 марта 2019
public  void deleteData(String name,int itemID){

    SQLiteDatabase db=getWritableDatabase();
    String query="DELETE FROM "+ TABLE_NAME + " WHERE "+ "'"+ COL1 +"'"+ " = "+ itemID + " AND "+ "'" + COL2 + "'" +" ="+ " '"+ name + "'";
   db.execSQL(query);

    db.execSQL(query);
}

1 Ответ

0 голосов
/ 30 марта 2019

Следующие сообщения неверны или могут рассматриваться как неправильные.

  1. Не должно быть необходимости вызывать один и тот же запрос дважды.

  2. Считается, что лучше использовать удобные методы Android SDK, когда они подходят (вместо использования execSQL метод delete более уместен).

  3. Существует вероятность атак SQLinjection, когда параметры используются непосредственно в строках, которые выполняются непосредственно как SQL (примечание, разрешение 2 и использование соответствующих параметров решают эту проблему).

  4. Существует, если столбцы не имеют имен с недопустимыми именами, нет необходимости заключать имена столбцов в одинарные кавычки или альтернативные символы (недопустимые имена могут осложнить жизнь, поэтому, если их использовать, многие будут считать их неправильными).1023 *

    Если удаление (первое) не работает или если кажется, что удаление не возвращает соответствующий результат после использования pragma count_changes, который может бытье, чтобы строка не существовала (вставлена ​​ли строка?) или что второй запрос, который ничего не удалит, скрывает результат первого запроса.

    1. pragma count_changes не рекомендуется в более поздней версииSQLite, поэтому больше не должен использоваться (хотя версия SQlite для Android, как правило, несколько отстает).

В качестве исправления для всей панели идентификатор, который не существует, вы можете использовать следующее: -

public  int deleteData(String name,int itemID){

    SQLiteDatabase db=getWritableDatabase();
    String whereclause = COL1 + "=? AND " + COL2 + "=?";
    String[] whereargs = new String[]{String.valueOf(int),name};
    return db.delete(TABLE_NAME,whereclause,whereargs);
}
  • Обратите внимание, что в результате подписи методов возвращается int , это будет количество удаленных строк.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...