Как удалить строку из БД в Android

Я новичок в Android... я разработал приложение базы данных, где я могу вставить данные текстового поля, но я хочу удалить определенную строку, мне нужно выполнить поиск по имени и удалить пользователя.

может кто-нибудь помочь мне в этом:

Мой код БД:

public void deleteRow(String firstname)
{

    try {db.delete(TABLE_NAME,TABLE_ROW_ONE + "=?" + new String[]{firstname},null);}
    catch (Exception e)
    {
        Log.e("DB ERROR", e.toString());
        e.printStackTrace();
    }
}

Код активности:

deleteButton.setOnClickListener ( new View.OnClickListener() { @Override public void onClick(View v) {deleteRow();} } );

частная пустота deleteRow () { попытка {

        db.deleteRow(textFieldOne.getText().toString());


        updateTable();


        emptyFormFields();
    }
    catch (Exception e)
    {
        Log.e("Delete Error", e.toString());
        e.printStackTrace();
    }
}

textFieldOne — это имя пользователя.

может кто-нибудь помочь мне в этом..


person Sai Krishna    schedule 17.09.2011    source источник
comment
Почему бы вам просто не использовать стандартный SQL-запрос?   -  person terrygarcia    schedule 17.09.2011


Ответы (2)


Удалите нулевой аргумент из вашего метода удаления... сделайте так ---->

db.delete(TABLE_NAME,TABLE_ROW_ONE + "=?" + new String[]{firstname});

Он будет работать нормально...

person Rocker    schedule 17.09.2011

Я думаю, вы неправильно поняли назначение ? в Android+sqlite.

? используются в качестве заполнителя, которые затем заменяются строками, которые вы передаете в качестве третьего аргумента для удаления и других подобных функций базы данных на Android.

В своем коде вы устанавливаете аргумент выбора как комбинацию строки выбора и массива строк аргументов выбора.

Изменение кода с

/* ... */ TABLE_ROW_ONE + "=?" + new String[]{firstname},null);

to

/* ... */ TABLE_ROW_ONE + "=?", new String[]{firstname});

должен сделать трюк.

Вы также можете просто сказать

db.delete(TABLE_NAME, TABLE_ROW_ONE + "='" + firstname + "'", null);

если вы хотите, но цель ? состоит в том, чтобы выполнить какое-то кэширование запросов, чтобы в следующий раз они были быстрее.

person Zharf    schedule 17.09.2011
comment
эй, большое спасибо, ребята, но у меня ничего не сработало .. public void deleteRow(String firstname) { // попросите менеджера баз данных удалить строку с заданным идентификатором try { db.delete(TABLE_NAME,TABLE_ROW_ONE + = + firstname,null ); } catch (Exception e) { Log.e(ОШИБКА БД, e.toString()); e.printStackTrace(); } } - person Sai Krishna; 18.09.2011
comment
когда я удаляю его по идентификатору строки, он удаляется, но я хочу выполнить поиск по имени и удалить... но этого не происходит.. - person Sai Krishna; 18.09.2011
comment
дважды проверьте, что TABLE_ROW_ONE на самом деле соответствует имени столбца, который вы хотите сопоставить, и что имя на самом деле находится в таблице, а имя не равно нулю... если имя имеет значение null, второй аргумент должен быть TABLE_ROW_ONE + не равен нулю. - person Zharf; 18.09.2011
comment
Не могли бы вы взглянуть на код и сказать мне, где я ошибаюсь... 4shared.com/file/c9zmraI4/AABDatabase_1.html - person Sai Krishna; 18.09.2011
comment
Еще одна вещь, которая приходит на ум, это то, что если в строке имени есть пробелы, то последний вариант, который я дал, вероятно, не работает правильно, вам следует использовать вариант со знаком вопроса. - person Zharf; 18.09.2011
comment
я перепробовал все способы.. мне не хватает чего-то простого, что я не могу понять.. не могли бы вы взглянуть на код, который я прикрепил к приведенной выше ссылке.. было бы здорово, - person Sai Krishna; 18.09.2011
comment
Во-первых, вы даете функции строку из неправильного текстового поля, дважды проверьте это... затем вам действительно следует использовать версию вопросительного знака (или добавить '' вокруг строки в запросе (мой плохой, будет обновляться отвечать...) - person Zharf; 18.09.2011
comment
Большое спасибо, Жарф ... я добавлю к нему вопросительный знак .. текстовое поле, которое я дал, для извлечения из имени .. - person Sai Krishna; 18.09.2011
comment
Большое спасибо, Жарф ... я добавлю к нему вопросительный знак .. текстовое поле, которое я дал, должно извлекаться из первого имени .. Когда я удалял из идентификатора, который я дал как Long.parse (Id_field.getext (). tostring), чтобы удалить строку из имени .. что я должен добавить ??? Надеюсь, ты не возражаешь против моих глупых вопросов .. я в курсе .. и пытаюсь понять .. - person Sai Krishna; 18.09.2011