2015-11-28 2 views
-1

У меня есть база данных, которая содержит несколько телефонных номеров. Мне нужно проверить, содержит ли база данных определенный номер. Как получить значения базы данных в инструкции if? Должен ли я использовать список массивов?Получение значений базы данных в выражении if

Это то, что я делал до сих пор ..

@Override 
public void onReceive(Context context, Intent intent) { 
Bundle bund=intent.getExtras(); 
String space=""; 

if(bund!=null) { 
Object[] smsExtra = (Object[]) bund.get(SMS_EXTRA_NAME); 

for (int i = 0; i < smsExtra.length; i++) { 
SmsMessage sms = SmsMessage.createFromPdu((byte[]) smsExtra[i]); 
body = sms.getMessageBody().toString(); 
address = sms.getOriginatingAddress(); 

db = openOrCreateDatabase("Admindb", MODE_PRIVATE, null); 
Cursor crs = db.rawQuery("select * from adminstbl", null); 
String[] str= new String[crs.getCount()]; 
crs.moveToFirst(); 
for(int k=0;k<str.length;k++) 
{ 
str[k] = crs.getString(crs.getColumnIndex("Number")); 
crs.moveToNext(); 
} 

if (address.equals(str)){ 
//do my task here 
} 
+1

вы хотите использовать SQL, чтобы сделать 'query' на вашей базе данных. http://developer.android.com/training/basics/data-storage/databases.html#ReadDbRow. Вы хотите сделать «выбор» на основе определенного номера – Blundell

+0

, что я пытаюсь сделать, так это то, что пользователь вводит какой-то номер телефона в начале приложения и когда получен sms, я хочу проверить, находится ли sms от любое число, которое пользователь вводил ранее, и выполнять некоторые задачи на основе этого. как мне это сделать?? –

+0

Вы можете сделать это, читая URL-адрес, который я связал выше. Тогда ваш следующий вопрос, вероятно, будет так: http://stackoverflow.com/questions/1243199/how-to-perform-an-sqlite-query-within-an-android-application – Blundell

ответ

1

Во-первых, в вашем коде активности, вы можете оценить вашу базу данных с помощью курсора.

Cursor numberCursor = mDbHelper.fetchRecord(mPhoneNumber); 

Образец кода, который будет у вас в обработчике базы данных.

public Cursor fetchRecord(long mPhoneNumber) throws SQLException { 

    Cursor mCursor = mDb.query(true, ACCOUNTS_TABLE, new String[]{ 
        ACCOUNTS_ROWID, ACCOUNTS_NAME, ACCOUNTS_ADDRESS, 
        ACCOUNTS_PHONENUMBER}, ACCOUNTS_PHONENUMBER+ "=" + mPhoneNumber, null, null, 
      null, null, null); 
    if (mCursor != null) { 
     mCursor.moveToFirst(); 
    } 
    return mCursor; 

} 

Та часть, которая считывает ACCOUNTS_PHONENUMBER + «=» + mPhoneNumber в запросе курсора ищет каких-либо записей, которые соответствуют номер, который передается из деятельности. Курсор будет только возвращать записи с этим номером.

Наконец, в вашей деятельности, после первой строки кода, показанной выше, вы можете поместить оператор if для проверки возвращаемого значения.

mReturnedNumber = numberCursor.getLong(3); 
    if (mReturnedNumber != null){ 
// You may now use the number here since it is not null 
} 

For more information on Sqlite queries, follow this link.

Ниже приведен пример кода для одного из приведенных ниже комментариев.

Cursor mCursor = mDb.query(true, ACCOUNTS_TABLE, new String[]{ 
       ACCOUNTS_ROWID, ACCOUNTS_NAME, ACCOUNTS_ADDRESS, 
       ACCOUNTS_PHONENUMBER}, ACCOUNTS_PHONENUMBER+ "=" + mPhoneNumber + " OR " + ACCOUNTS_PHONENUMBER_2 + "=" + mPhoneNumber, null, null, 
     null, null, null); 

Обратите внимание, что запрос теперь имеет инструкцию OR.

+0

я отредактировал мой question..above мой код –

+0

благодарим за ответы. я попробую его и дам вам знать, работает ли он –

+1

@Shinil. Как я использовал оператор запроса, возвращается только соответствующее значение. Нет необходимости писать код, который просеивает все записи, чтобы найти совпадение. Изучите информацию по ссылке, которую я поставил в своем ответе, и я думаю, вы обнаружите, что структура Sqlite упростит вашу жизнь. – Tequilaman

Смежные вопросы