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...