1

我想从我的数据库助手类中使用下面给定的删除方法。我问了 2 次,但没有得到这样的答复。这是我从androidhive.info获取的处理程序类

删除方法(在 DatabaseHandler 文件中):

// Deleting single contact
public void deleteContact(Contact contact) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_CONTACTS, KEY_ID + " = ?",new String[] { String.valueOf(contact.getID()) });
    db.close();
}

当我在另一个活动中实现它时。像这样

String a = Integer.toString(_contactlist.get(position).getID());
            viewHolder.txtid.setText(a.trim());
            viewHolder.txt_name.setText(_contactlist.get(position).getName().trim());
            viewHolder.txt_phone.setText(_contactlist.get(position).getPhoneNumber().trim());

final int temp = position;

Contact pm = db.getContact(temp); //temp is the position of the contact
    db.deleteContact(pm);

但是当我使用它时,我遇到了一个意外错误,即它只删除了行中的 1 个数据,而不是选定的数据。

我的getContact 方法:

// Getting single contact

Contact getContact(int id) {
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
            KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",
            new String[] { String.valueOf(id) }, null, null, null, null);
    if (cursor != null)
        cursor.moveToFirst();

    Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
            cursor.getString(1), cursor.getString(2));
    // return contact
    return contact;
}
4

3 回答 3

1

尝试使用 where 子句给出完整的查询。代替

db.delete(TABLE_CONTACTS, KEY_ID + " = ?",new String[] { String.valueOf(contact.getID()) });

利用

db.execSQL("delete * from TABLE_CONTACTS where KEY_ID = "+contact+";");

前提是,contact 应该是一个整数变量。

于 2013-09-14T07:23:50.123 回答
0

但是当我使用它时,我遇到了一个意外错误,即它只删除行中的 1 个数据而不是选定的数据

deleteContact() 方法只会从数据库中删除一条记录,因为 KEY_ID 似乎是唯一的。您是否期望删除更多记录?还是删除了错误的记录?您可能需要在 getContact() 中放置一些调试语句来检查它是否检索到错误的联系人。

我想指出 getContact() 中的一个编码问题,它可能与您的问题无关,但仍需要更正。

    if (cursor != null)
    cursor.moveToFirst();

您正在检查空游标,但如果它为空,则没有任何防护措施,并且您仍在继续访问游标。此外,您必须检查 moveToFirst() 是否为 null,如果光标不为 null,但没有要读取的记录,该怎么办。该应用程序将在这两种情况下崩溃。

于 2013-08-21T02:43:55.100 回答
0

该方法deleteContact关闭数据库句柄。

于 2013-09-14T08:33:55.843 回答