我是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_profile
和email
在上面的rawQuery中突出显示为错误,因为它们是正确的表和列名称?我错过了进口商品吗?
干杯
答案 0 :(得分:3)
user_pofile
(错字)和email
不是双引号,因此它们被视为Java变量名称,并且您的代码中没有这样的名称变量。
如果您想使用变量,请使用DATABASE_TABLE
和USER_ID
替换,或者将user_profile
和email
放在双引号中。
此外,您需要在单引号中引用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);