如何在where子句中使用rawQuery?

时间:2014-03-14 11:19:26

标签: android sqlite

我在rawquery中使用WHERE子句从SQLite数据库中检索数据,如下所示:

public Cursor Return_SMS(String contact_no)
    {       
        SQLiteDatabase db=this.getReadableDatabase();        
        //String[] params=new String[]{contact_no};

         Cursor c=db.rawQuery("SELECT * FROM "+ "SMS_TABLE_RCV"+" WHERE "+ "Phone_number " + " = " + contact_no,null);

        return c;
    }

但是没有检索到数据。如何使用Phone_number获取的数据等于我从光标中的Activity传递的值为" contact_no" ?

3 个答案:

答案 0 :(得分:6)

要在查询中获取参数值,您必须使用?之类的parameter token

String[] params = new String[]{ contact_no };
Cursor c = db.rawQuery("SELECT * FROM SMS_TABLE_RCV WHERE Phone_number = ?",
                       params);

对于这样的简单查询,您不需要使用rawQuery,但可以使用query

String[] params = new String[]{ contact_no };
Cursor c = db.query("SMS_TABLE_RCV", null,
                    "Phone_number = ?", params,
                    null, null, null);

您还必须确保联系电话号码是正确的,即电话号码而不是其他ID号码,并且它存在于数据库中。

答案 1 :(得分:1)

使用此行:

Cursor c=db.rawQuery("SELECT * FROM "+SMS_TABLE_RCV+" WHERE "+Phone_number +" ='"+contact_no+"'" ,null);

而不是

Cursor c=db.rawQuery("SELECT * FROM "+ "SMS_TABLE_RCV"+" WHERE "+ "Phone_number " + " = " + contact_no,null);

答案 2 :(得分:0)

试试这种方式

Cursor c = db.rawQuery("SELECT * FROM "+SMS_TABLE_RCV+" WHERE Phone_number='" + contact_no + "'",null);

if(c!=null){
 c.moveToFirst();
}