Попытка получить оператор удаления базы данных возвращает логическое значение, если работает или нет - PullRequest
0 голосов
/ 03 апреля 2012

Я пытаюсь, чтобы моя функция удаления возвращала логическое значение, работает оно или нет.Пользователь вводит номер, и если есть строка с этим номером, он удаляет эту строку.Проблема, с которой я сталкиваюсь, состоит в том, что, если я ввожу неправильный номер, никакая ошибка не происходит.Затмение заставило меня попытаться поймать оператор db.delete.Однако, когда я использую отладчик и ввод и неверный номер, оператор try работает и пропускает часть catch.Я пытаюсь выяснить, как заставить оператор delete возвращать логическое значение, если оно не работает, таким образом, я могу использовать оператор if для создания тоста, который показывает ошибку.Вот код оператора удаления

public void deleteInspection(long _id)throws Exception
{
    db.delete(DB_TABLE,"_id=" + _id , null);

}

Вот оператор try catch - диалоговое окно с предупреждением.

  new AlertDialog.Builder(this)
            .setTitle("Delete a report")
            .setMessage("Enter the Id number of the report to delete")
            .setView(addView)
            .setPositiveButton("Submit",
                    new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog,
                                int which) {
                            String id = idNum.getText().toString();
                            long primaryId = Long.parseLong(id);
                            info.open();
                            try {
                                info.deleteInspection(primaryId);
                            } catch (Exception e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }                           
                            info.close();
                            dbInfo();
                        }
                    })
            .setNegativeButton("Cancel",
                    new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog,
                                int which) {
                            // TODO Auto-generated method stub

                        }
                    }).show();
}

1 Ответ

2 голосов
/ 03 апреля 2012

db.delete() должен возвращать int, то есть количество затронутых строк.Немного измените свой код, и это становится довольно просто:

public boolean deleteInspection(long _id)throws Exception
{
    int numResults = 0;
    numResults = db.delete(DB_TABLE,"_id=" + _id , null)
    return (numResults < 1);
}

<preaching> В качестве примечания, обычно игнорируется общий охват всех исключений (catch (Exception e)), лучше для решения всех проблемв каждом конкретном случае, поскольку ваш блок уловов может скрывать какую-то особенно злую ошибку под поверхностью </preaching>:).

...