我目前正在从事A Level计算机科学控制的评估,使用Android Studio,Java和XML制作Scout Manager应用程序,而我以前从未使用过它们。我现在处于最后阶段,但是遇到了我似乎无法解决的错误。
我正在尝试从事件表中删除会话记录。之前,这种方法已经很好地工作了,但是由于某种原因,尽管代码没有任何变化(无论如何我还是记得),但它不再起作用了。
以下是“编辑事件”活动中的代码:
//Deletes the event from the database
public void deleteEvent(View view)
{
boolean result=DatabaseHandler.deleteSession(sessionid);
if (result==true)
{
Toast.makeText(
context,
"Event Deleted",
Toast.LENGTH_SHORT
).show();
backToProgramme(view);
}
else
{
Toast.makeText(
context,
"Error - please try again",
Toast.LENGTH_SHORT
).show();
}
}
这是来自databaseHandler的代码:
//Deleting a session in the events table
public boolean deleteSession(int id)
{
boolean result = false;
String query = "SELECT * FROM " + TABLE_EVENTS + " WHERE " + COLUMN_SEID + " = '"
+ String.valueOf(id) + "'";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);
sessionDetails session = new sessionDetails();
if (cursor.moveToFirst())
{
session.setSessionID(Integer.parseInt(cursor.getString(0)));
db.delete (TABLE_EVENTS, COLUMN_SCID + "=?", new String[]{String.valueOf(
session.getSessionID())});
cursor.close();
result = true;
}
return result;
}
我根本无法弄清为什么这不删除记录。
答案 0 :(得分:3)
您在这里做的是:
在表TABLE_EVENTS
中搜索以找到COLUMN_SEID = id
的行,如果找到,则获取列COLUMN_SCID
的值,并删除其中COLUMN_SCID
等于该值的行!
为什么要这样?
您不能只用COLUMN_SEID = id
删除行吗?
我相信您的代码应这样写:
public boolean deleteSession(int id) {
SQLiteDatabase db = this.getWritableDatabase();
return db.delete(TABLE_EVENTS, COLUMN_SEID + " = ?", new String[]{String.valueOf(id)}) > 0;
}
方法delete()
返回已删除的行数,因此,如果没有行被删除,deleteSession()
将返回false
。