How to use LIKE clause in query function

android, sqlite

Solution

There is two joker : "%" and "_".

"%" is replacing any string (multiple characters),

"_" is replacing one (and only one) character.

For example :

LIKE 'B%' 

let you find everything which starts with "B". (like "BATMAN");

LIKE '%B%'

let you find everthing which contains "B". (like "ABBA");

LIKE'_B%'

let you find everything which contains ONE caracter, then a "B". (like "ABERCROMBIE)".

if you want to retrieve a string which contains "%" or "_", you may use an escape caracter :

LIKE '%#_B%' ESCAPE #

let you find any strings which contains one "_" followed by a "B". (like "TEST_BATMAN").

I hope that helped.

Al_th

Problem

I am making an application which search messages in the inbox based on sender number. Here is my code: ``` public void onClick(View v) { Toast.makeText(this, "search", Toast.LENGTH_LONG).show(); final Uri SMS_INBOX = Uri.parse("content://sms/inbox"); String[] colList = {"address", "body"}; Cursor c = getContentResolver().query(SMS_INBOX, colList, null, null,"DATE desc"); String yz= String.valueOf(c.getCount()); Toast.makeText(this, yz, Toast.LENGTH_LONG).show(); if(c.moveToFirst()) { Toast.makeText(this, searchtxt.getText(), Toast.LENGTH_LONG).show(); for(int i=0;i<c.getCount();i++) { String number=c.getString(c.getColumnIndexOrThrow("address")).toString(); boolean match = number.toUpperCase().indexOf(searchtxt.getText().toString()) != -1; if (match) { Toast.makeText(this, String.valueOf(i), Toast.LENGTH_LONG).show(); String body= c.getString(c.getColumnIndexOrThrow("body")).toString(); tv.setText(tv.getText() + "\n" + body); } c.moveToNext(); } } else { Toast.makeText(this, "Inside else", Toast.LENGTH_LONG).show(); } c.close(); } ``` The above code works fine but it retrieves all the messages in the inbox. I want that it should retrieve only those messages which match the sender number. For that I tried a query using LIKE clause, but with that it returns 0 records. What is the correct way of using the LIKE clause. Here is the code that I tried using LIKE ``` String[] colList = {"address", "body"}; String[] argList = {"'%"+searchtxt.getText().toString()+"%'"}; Cursor c = getContentResolver().query(SMS_INBOX, colList, "address LIKE ?", argList,"DATE desc"); String yz= String.valueOf(c.getCount()); Toast.makeText(this, yz, Toast.LENGTH_LONG).show(); ``` Please help me out....Thank you...

Original source

Related problems