有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java记录不会从SQLite数据库中删除

我目前正在进行A级计算机科学控制评估,在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;
    }

我根本不明白为什么这不是删除记录


共 (1) 个答案

  1. # 1 楼答案

    您在这里所做的是:
    搜索表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