我想在我的Database Helper类中使用下面给出的delete方法。我问了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;
}
答案 0 :(得分: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应该是一个整数变量。
答案 1 :(得分:0)
但是当我使用它时,我收到一个意外错误,即它只删除了行中的1个数据而不是所选数据
deleteContact()方法将只删除数据库中的一条记录,因为KEY_ID似乎是唯一的。您是否期望删除更多记录?还是删除错误的记录?您可能希望在getContact()中放入一些调试语句来检查它是否检索到错误的联系人。
我想指出getContact()中的编码问题可能与您的问题无关,但仍需要更正。
if (cursor != null)
cursor.moveToFirst();
您正在检查空游标,但如果它为null并且您仍在前进以访问游标,则没有保护。此外,您必须为moveToFirst()检查null,如果游标为非null,但没有要读取的记录,该怎么办?在这两种情况下,应用都会崩溃。
答案 2 :(得分:0)
方法deleteContact
关闭数据库句柄。