【问题标题】:How to use rawQuery with where clause?如何将 rawQuery 与 where 子句一起使用?
【发布时间】:2014-03-14 11:19:26
【问题描述】:

我在 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”传递的值?

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    要将参数的值放入查询中,您必须使用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 号码,并且它存在于数据库中。

    【讨论】:

      【解决方案2】:

      使用这一行:

      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);
      

      【讨论】:

      • contact_no 包含引号时,这将中断。
      【解决方案3】:

      试试这个方法

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

      【讨论】:

      • contact_no 包含引号时,这将中断;返回的光标永远不能是null;并且这个函数不应该调用moveToFirst(无论如何不检查返回值是没用的)。
      猜你喜欢
      • 2014-03-20
      • 1970-01-01
      • 2020-10-08
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多