Android SQLite在检查结果是否退出时始终为true

时间:2015-07-01 14:09:11

标签: android sqlite

我正在进行登录和注册系统,如果需要检查用户是否已经退出,那么我在我的数据库处理程序中编写了这个函数来检查它。

public boolean checkIfUserExits(String username){
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "SELECT * FROM " + TABLE_NAME + " WHERE username=" + "\"" + username + "\"";
    Cursor cursor = db.rawQuery(query, null);

    if(cursor.getCount() <= 0){
        cursor.close();
        return false;
    }
    cursor.close();
    return true;
}

但问题是,如果我总是得到一个真实的。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

嗯,确实存在:

从您发布的其他功能(可以在修订历史记录中访问它,所以在发布内容之前仔细检查,因为即使您编辑它也会保持不变)

user = new User(username, password, email);
dbHandler.createUser(user);

if(dbHandler.checkIfUserExits(username) == true){

您可以删除== true,这是多余的。无论如何,您创建用户,然后检查它是否存在。当然它确实如此,你刚刚创建它。

简单但错误的修复方法是首先检查,然后创建用户。不幸的是,如果出于某种原因,两个程序同时执行此操作,则很可能它们都会看到用户不存在,并且都继续存在。

您可能想要做的就是尝试创建用户,无论如何,然后检查它是否有效。我不了解这种环境,但肯定你应该能够检测到完整性约束违规。

答案 1 :(得分:-2)

可以确定您的光标为空且无法计算成员...我的应用程序使用了类似的方法,但它更完整,可以更好地控制错误。

  • 为什么我传递complet查询?对于一般班级来说,它很简单,它是一种通用方法。有了这个,您可以将此方法用于所有调用,并且不需要为不同的调用创建新方法...如果您需要一个查询,那么请在内部包含您的问题。

您可以看到以下代码:

public boolean exists_the_ColumnParameter(String query){
    //Declaration of variables
    Cursor a3 = null;

    try{
        a3 = database.rawQuery(query,null);

        a3.moveToFirst();

        if(a3.getString(0).equals("")){
            a3.close();
            return false;
        }
        else{
            a3.close();
            return true;
        }

    }
    catch (CursorIndexOutOfBoundsException ex){
        return false;
    } catch (Exception ex){
        Log.e("-- BDD.exists_the_ColumnParameter --","Exception",ex);
        return false;
    }
}

告诉我,如果我帮助你并做好编程!