我想从数据库中提取联系人。在下面的代码中,当调用rawQuery()
时,出现错误,说明当对象为db
时,需要完成对象转换。我很困惑参数rawQuery()
需要。请你能向我解释一下吗?错误的数据提取使用rawQuery
String select = "SELECT id, name FROM contacts WHERE email = " + email;
Cursor c = db.rawQuery(select, null);
我想从数据库中提取联系人。在下面的代码中,当调用rawQuery()
时,出现错误,说明当对象为db
时,需要完成对象转换。我很困惑参数rawQuery()
需要。请你能向我解释一下吗?错误的数据提取使用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[] {"%"});
我使用的第二approach.Thank你的建议。在rawQuery中仍然显示一个错误,它表示在DBAdapter中创建createQuery方法。你能解释给我吗?我是新来的机器人,这是相当混乱! – user2761022
@ user2761022 [rawQuery()](http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html)是方法SQLiteDatabase实例,而不是您自定义实现的DBAdapter。所以你需要在你的SQLiteDatabase实例上调用rawQuery。 – Sajmon
db = DBHelper.getWritableDatabase(); 我在DBAdapter中完成了。并在活动中我已经将它实例化为DBAdapter db = new DBAdapter(this);仍然,为什么是错误信息? – user2761022