检索数据库值并分配给字符串值

时间:2017-05-18 20:28:43

标签: java android android-studio

我正在创建一个包含登录/注册功能的应用程序,而我正在尝试解决这个问题。

当用户登录并且登录成功时,我想使用他们登录的电子邮件使用Intent传递给下一个活动(我检查了电子邮件实际上是通过显示什么来传递的正在传递意图),然后将该电子邮件传递给Dbhelper中的一个函数,该函数使用该电子邮件查找登录的人的姓名然后显示"欢迎(人名)"在当前活动中,但我一直在函数中返回null,最终导致应用程序崩溃。

这是我在活动中调用该功能的地方。

if(!session.loggedIn())
        {
            Logout();
        }
        else
        {
            Intent in  = getIntent();
            String email = in.getStringExtra("email");
            Name.setText("Welcome " + db.findName(email));
        }

这是我的DbHelper.java中的函数,我在那里查找带有查询的名称等。

public String findName(String user_email)
{
    String query = "SELECT " + COLUMN_NAME + " FROM " + USER_TABLE + " WHERE " + COLUMN_EMAIL + " = " + "'" + user_email + "'";
    SQLiteDatabase db = this.getWritableDatabase();

    //reads for database
    Cursor c = db.rawQuery(query, null);
    c.moveToFirst();
    if(c.getCount() > 0) // if cursor is not empty
    {
        String n = c.getString(0);
        return n;
    }
    else
    {
        return null;
    }

}

如您所见,它返回null。是的,数据库中已有条目。此外,我尝试将电子邮件传递给函数并返回传递的内容,但它仍然给我一个错误。

1 个答案:

答案 0 :(得分:0)

通常,要检查文本列中的值,请不要使用相等的=符号,而应使用WHERE Column LIKE '%text%'。此外,当保存到数据库时,您应该逃避并且"清理"字符串。如果你这样做了,那么在寻找它们时你也应该做同样的过程,否则你将无法找到它们。

我告诉你,因为即使您确定表中有条目,查询结果也可能为空。您可以通过打印c.getCount()调用的结果进行调试。