获取更新的行从Android中的SQLite使用原始查询计数?

我怎样才能得到在Android中的SQLite中使用update语句更新的行数?

请注意,我需要使用某种types的SQL语句的原始执行,而不是对ContentValues执行任何操作,因为我需要dynamic查询。 因此我不能使用SQLiteDatabase.update()方法。 例如,我正在运行类似的东西

 UPDATE my_table SET field_name = field_name + 1 

我知道的方法返回void,例如SQLiteDatabase.execSQL()SQLiteDatabase.rawQuery()返回一个Cursor ,但游标有零行,它的计数总是-1。

你可以用你想要的方式进行插入,然后做一个select并使用changes()函数返回受影响的行数。

为了扩展Mat的答案 ,下面是获取更新行数的示例代码:

 Cursor cursor = null; try { cursor = db.rawQuery("SELECT changes() AS affected_row_count", null); if(cursor != null && cursor.getCount() > 0 && cursor.moveToFirst()) { final long affectedRowCount = cursor.getLong(cursor.getColumnIndex("affected_row_count")); Log.d("LOG", "affectedRowCount = " + affectedRowCount); } else { // Some error occurred? } } catch(SQLException e) { // Handle exception here. } finally { if(cursor != null) { cursor.close(); } } 

拓展Mat和Pang的答案

我们可以跳过光标,并使用simpleQueryForLong()

例如

 public long getChangesCount() { SQLiteDatabase db = getReadableDatabase(); SQLiteStatement statement = db.compileStatement("SELECT changes()"); return statement.simpleQueryForLong(); } 

你可以使用SQLiteStatement.executeUpdateDelete方法:

 SQLiteDatabase db = getReadableDatabase(); SQLiteStatement statement = db.compileStatement("[your sql here]"); int affectedRows = statement.executeUpdateDelete(); 

在SQLiteDatabase.update(…)方法内部使用相同的方法。