2014-10-30 3 views
0

Я пытаюсь выполнить один запрос на обновление, где мне нужно обновить одно поле для многих людей. Теперь ниже запрос работает: -Как использовать предложение WHERE IN в Android Sqlite?

UPDATE PERSON SET ISSELECTED=1 WHERE ID IN (132,142,115,141,41,133,40,56,139,134,135,65,143,9,64,39,120,104,122,35,19,98,124,127,130,136,119,123,55,102,5,128,140,95,138,131,96,93,129,103,94,89,126,21,29,125,3,101,92,113,4,88,111,63,60,38,114,90,31,118,99,121,117,100,112,97,25,116,10,32,27,30,14,26,12,61,57,20,107,110,91,109,108,106,105,16,62,33,59,18,58,36,11,15,37,28,24,6,7,8,34,13) 

Но он не возвращает количество обновленных строк при использовании с execSql или rawQuery

Я пытаюсь сформировать этот запрос, используя update метод, который возвращает нет. от затронутых рядов

int rowsUpdatedSelected = db.update("PERSON", values, "ID" + " = ?", new String[] {id.toString()}); 
// where id is a StringBuilder object containing the ids like above 

Но это не работает.

+0

- это числовое поле ID или текст в базе данных –

+0

Это текстовое поле, но я запустил этот запрос в sqlite-менеджере и обновил данные. –

+0

. Ваш запрос заканчивается как '... WHERE ID = '132,142,115, ...''. –

ответ

0

Вы можете попробовать использовать sqlite3_changes() для этого:

Эта функция возвращает количество строк базы данных, которые были изменены или вставлены или удалены в последнее время завершенного заявление SQL на подключение к базе данных, заданный первым параметр. Учитываются только изменения , которые непосредственно указаны оператором INSERT, UPDATE или DELETE .

Так после обновления заявления, добавьте этот код:

Cursor cursor = null; 
try 
{ 
    cursor = db.rawQuery("SELECT changes() AS updated_row_count", null); 
    if(cursor != null && cursor.getCount() > 0 && cursor.moveToFirst()) 
    { 
     final long count = cursor.getLong(0); 
     Log.d("LOG", "no. of updated rows : " + count); 
    } 
} catch(SQLException e) 
{ 
    e.printStackTrace(); 
} finally 
{ 
    if(cursor != null) 
    { 
     cursor.close(); 
    } 
} 

Надеется, что это помогает.

+0

Это неэффективно, так как мне нужно обновлять строки, а метод update возвращает количество строк и запрос в порядке. Мне просто нужно mofidy это в соответствии с методом 'update' SQLiteDatabase –

2

Вы можете написать метод, чтобы сделать строку запроса IN и использовать это при выбореArgs. Как ниже

selectionArgs = idArray; // Where id array will be String[] and will contain all of your ids 
selection = "ID" + makeInQueryString(idArray.length); 

Где makeInQueryString() является

/** 
* Creates where string which can be used for IN query. It creates string 
* containing "?" separated by ",". This method can be used as below <br> 
* ColumnName + makeInQueryString(size) <br> 
* This will create IN query for provided column name. 
* 
* @param size 
*   size of the items 
* @return IN query string of the form (?,?,?,?) 
*/ 
public static String makeInQueryString(int size) { 
    StringBuilder sb = new StringBuilder(); 
    if (size > 0) { 
     sb.append(" IN ("); 
     String placeHolder = ""; 
     for (int i = 0; i < size; i++) { 
      sb.append(placeHolder); 
      sb.append("?"); 
      placeHolder = ","; 
     } 
     sb.append(")"); 
    } 
    return sb.toString(); 
} 
0

Попробуйте этот код.

Положите одиночную кавычку на ваш в вас В данных

UPDATE PERSON SET ISSELECTED=1 WHERE ID IN ('132','142','115','14','1'); 
+0

Я хочу использовать метод UPDATE базы данных. Сырой запрос в порядке и выполняется –

0

Я не пробовал это .. просто дать попробовать .. и дайте мне знать wethr его работы или нет ..

int rowsUpdatedSelected = db.update("PERSON", values, "ID IN (?)", new String[] {id.toString()}); 
Смежные вопросы