Android 如何调用数据库助手类的Delete方法?

Android 如何调用数据库助手类的Delete方法?,android,database,sqlite,android-sqlite,Android,Database,Sqlite,Android Sqlite,我想从我的数据库助手类中使用下面给定的delete方法。我问了两次这个问题,但没有得到这样的回答。这是我从中获取的处理程序类 删除方法(在DatabaseHandler文件中): // Deleting single contact public void deleteContact(Contact contact) { SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_CONTACTS, KEY_ID

我想从我的数据库助手类中使用下面给定的delete方法。我问了两次这个问题,但没有得到这样的回答。这是我从中获取的处理程序类

删除方法(在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();
}
// 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;
}
当我在另一个活动中实施它时。像这样:

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个数据,而不是所选的数据

我的获取联系方式:

// 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();
}
// 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;
}
但是,当我使用它时,我得到了一个意外错误,即它只删除了行中的1个数据,而不是所选的数据

deleteContact()方法将只从数据库中删除一条记录,因为密钥ID似乎是唯一的。您是否希望删除更多记录?还是删除了错误的记录?您可能希望在getContact()中放入一些调试语句,以检查它是否检索到了错误的联系人

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

    if (cursor != null)
    cursor.moveToFirst();
您正在检查空光标,但如果它为空,并且您仍在向前移动以访问光标,则没有保护。此外,还必须为moveToFirst()检查null,如果光标为非null,但没有可读取的记录,该怎么办。在这两种情况下,应用程序都会崩溃

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

deleteContact()方法将只从数据库中删除一条记录,因为密钥ID似乎是唯一的。您是否希望删除更多记录?还是删除了错误的记录?您可能希望在getContact()中放入一些调试语句,以检查它是否检索到了错误的联系人

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

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

您正在检查空光标,但如果它为空,并且您仍在向前移动以访问光标,则没有保护。此外,还必须为moveToFirst()检查null,如果光标为非null,但没有可读取的记录,该怎么办。应用程序在这两种情况下都会崩溃。

尝试使用where子句提供完整的查询。而不是

db.delete(TABLE_CONTACTS,KEY_ID+“=?”,新字符串[]{String.valueOf(contact.getID())})

使用

db.execSQL(“从表_CONTACTS中删除*,其中键_ID=“+contact+”;”)


如果提供,contact应该是一个整数变量。

尝试使用where子句提供完整的查询。而不是

db.delete(TABLE_CONTACTS,KEY_ID+“=?”,新字符串[]{String.valueOf(contact.getID())})

使用

db.execSQL(“从表_CONTACTS中删除*,其中键_ID=“+contact+”;”)


如果提供,contact应该是一个整数变量。

方法
删除contact
关闭数据库句柄。

方法
删除contact
关闭数据库句柄。

我已经这样做了,很抱歉没有提及。。我的问题是如何在另一个Listview活动中调用此delete方法。创建一个数据库处理程序类及其所有相关函数。然后,您可以在应用程序中的任何位置使用它们,而不会出现任何问题。另一种解决方案可以是使用ContentResolver对象。ContentResolver cr=getContentResolver();cr.delete(…);我的这个方法在数据库处理程序类中,但当我使用它并删除数据时,它只会删除我所有数据中的“第一”个数据。!!我做了这件事,很抱歉没有提及。。我的问题是如何在另一个Listview活动中调用此delete方法。创建一个数据库处理程序类及其所有相关函数。然后,您可以在应用程序中的任何位置使用它们,而不会出现任何问题。另一种解决方案可以是使用ContentResolver对象。ContentResolver cr=getContentResolver();cr.delete(…);我的这个方法在数据库处理程序类中,但当我使用它并删除数据时,它只会删除我所有数据中的“第一”个数据。!!