SQLite rawQuery错误

时间:2014-07-16 08:00:31

标签: android sqlite

我是SQLite的新手。我有一个SQLite数据库,其中包含用户的详细信息,如

public static final String USER_ID = "email";
public static final String USER_NAME = "user_name";
public static final String PASSWORD = "password";

public static final String DATABASE_NAME = "molo.db";
public static final String DATABASE_TABLE = "user_profile";
private static final int DATABASE_VERSION = 1;

//SQL to create new database
private static final String DATABASE_CREATE = 
        "create table " + DATABASE_TABLE +
        " (" +
        USER_ID + " TEXT PRIMARY KEY NOT NULL UNIQUE , " +
        USER_NAME + " TEXT NOT NULL, " +
        PASSWORD + " TEXT NOT NULL);"; 

我可以注册新用户并且工作正常,我可以看到它在我从模拟器中提取数据库时有效。 我现在正尝试使用已存储在数据库中的用户详细信息登录。我已经搜索并找到了几个解决方案,但是当我尝试实现它时,我收到了错误。我试过这个:

public boolean verification(String Email) throws SQLException
{
    Cursor c = database.rawQuery("SELECT * FROM "+ user_pofile +" WHERE "+ email + "=" + Email, null);
    if (c!=null)
    {
        return true;
    }
    return false; 
}

确定用户的电子邮件是否已存在于数据库中。任何人都可以解释为什么user_profileemail在上面的rawQuery中突出显示为错误,因为它们是正确的表和列名称?我错过了进口商品吗? 干杯

2 个答案:

答案 0 :(得分:3)

user_pofile(错字)和email不是双引号,因此它们被视为Java变量名称,并且您的代码中没有这样的名称变量。

如果您想使用变量,请使用DATABASE_TABLEUSER_ID替换,或者将user_profileemail放在双引号中。

此外,您需要在单引号中引用SQL中的字符串文字,或使用变量。

例如,

rawQuery("SELECT * FROM user_profile WHERE email = ? ", new String[] { Email })

此外,Cursor不会为空,检查null确实无法正常工作。要查看查询是否与任何内容匹配,请检查moveToFirst()是否返回true

答案 1 :(得分:0)

您在查询结尾处拥有的字符串Email不会被单引号括起来,普通查询的语法是:

SELECT * FROM usertable WHERE userID = '123'

因此您必须使用两个单引号括起电子邮件变量:"'"+Email+"'"

试试这个:

database.rawQuery("SELECT * FROM "+ user_pofile +" WHERE "+ email + "=" + "'"+Email+"'", null);