【问题标题】:Android Studio, Java: getCount of Cursor returns 0 after checkUser function with newly created UserAndroid Studio,Java:getCount of Cursor 在 checkUser 函数与新创建的用户后返回 0
【发布时间】:2022-01-26 10:56:34
【问题描述】:

我有一个内存中的 SQLite DB,并在运行时创建了一个带有 ID、用户名和密码的行。该插入返回 1。

之后,我运行以下函数来检查创建用户的用户凭据与输入字段中的用户凭据,这些凭据与上面创建的用户使用的凭据完全相同。 (基本上,我检查用户是否已经存在,如果不存在,我使用输入的凭据创建用户并立即检查以验证登录)

最后的 getCount 总是返回 0,我不知道为什么。调试器显示用户名和密码的正确凭据,我开始没时间了...期末考试项目...

public boolean checkUser(String username, String password) {
        String[] columns = new String[]{
                COL_USERNAME,
                COL_PASSWORD
        };
        SQLiteDatabase db = this.getReadableDatabase();
        String selection = COL_USERNAME + " = ?" + " AND " + COL_PASSWORD + " = ?";
        String[] selectionArgs = {username, password};

        Cursor c = db.query(
                T_USER,
                columns,
                selection,
                selectionArgs,
                null,
                null,
                null);
        int cursorCount = c.getCount();
        c.close();
        db.close();
        if (cursorCount > 0) {
            return true;
        }
        return false;
    }

【问题讨论】:

    标签: java database sqlite android-studio android-sqlite


    【解决方案1】:

    内存数据库只有在您打开数据库时才有效。要么切换到基于文件的数据库,要么保留一个对SQLiteDatabase 的引用而不调用close()

    【讨论】:

    • @PLANET_XYZ :-) 我赞赏你能够看到自己的错误。我仍然建议对自己更有礼貌。此外,使用这些词可能会引起 StackOverflow 用户的反应,他们认为从一般角度来看,这些词措辞过于苛刻。我建议删除评论。或者改写。
    • 很公平,缓解了一点...@laalto,仍然非常感谢您指出这一点!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 2018-11-07
    • 2016-10-02
    • 2020-05-27
    • 2018-12-06
    • 2018-10-14
    相关资源
    最近更新 更多