-1

我正在尝试从数据库中提取联系人。在下面的代码中,当调用 时rawQuery(),我收到错误消息说对象转换需要在db对象为对象时进行。我对参数要求感到困惑rawQuery()。请问你能给我解释一下吗?

String select = "SELECT id, name FROM contacts WHERE email = " + email;
Cursor c = db.rawQuery(select, null);
4

2 回答 2

0
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 实例。

于 2013-10-10T10:41:35.670 回答
0

尝试这个

 Cursor  cursor = dh.rawQuery("SELECT _id ,name  FROM contacts WHERE email LIKE ? ", new String[] {"%"});
于 2013-10-10T11:15:44.573 回答