2014-10-30 213 views
0

我想执行一个更新查询,我必须更新许多人的单个字段。 现在下面的查询工作: -如何在Android Sqlite中使用WHERE IN子句?

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) 

但随着execSqlrawQuery

我试图形成使用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数字字段或数据库中的文本 – 2014-10-30 05:26:44

+0

这是文本字段,但我在sqlite管理器中运行此查询并更新了数据 – 2014-10-30 05:27:48

+0

您的查询结束为'... WHERE ID ='132,142,115,...''。 – 2014-10-30 10:05:51

回答

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

这是低效的,因为我需要更新行并且更新方法返回行数并且查询正常。我只需要根据SQLiteDatabase的'update'方法来修改它。 – 2014-10-30 05:31:37

2

您可以编写一个方法来创建IN查询字符串并将其用作selectionArgs。像下面

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方法。原始查询很好,正在执行 – 2014-10-30 05:33:33

0

我没有尝试这个..只是给一个尝试..让我知道wethr其工作或不..

int rowsUpdatedSelected = db.update("PERSON", values, "ID IN (?)", new String[] {id.toString()}); 
相关问题