我正在尝试从数据库中提取联系人。在下面的代码中,当调用 时rawQuery()
,我收到错误消息说对象转换需要在db
对象为对象时进行。我对参数要求感到困惑rawQuery()
。请问你能给我解释一下吗?
String select = "SELECT id, name FROM contacts WHERE email = " + email;
Cursor c = db.rawQuery(select, null);
String select = "SELECT id, name FROM contacts WHERE email = " + email;
在您的情况下,此代码将不起作用,因为您直接将参数添加到需要将它们包装成单引号的查询(否则它将不起作用并且 SQLite 会将值解释为列并且将引发异常)。因此,您需要将其更改为:
String select = "SELECT id, name FROM contacts WHERE email = '" + email + "'";
它现在应该可以工作了。
但我不喜欢你的做法。它不是人类可读且危险的(SQL 注入)。我强烈建议您使用更快、更安全且更易于阅读的参数化查询。
例子:
String select = "SELECT id, name FROM contacts WHERE email = ?";
String[] whereArgs = {email};
Cursor c = db.rawQuery(select, whereArgs);
希望能帮助到你。
注意:还要确保您已正确初始化 SQLiteDatabase 实例。
尝试这个
Cursor cursor = dh.rawQuery("SELECT _id ,name FROM contacts WHERE email LIKE ? ", new String[] {"%"});