Get updated rows count from SQLite in Android using a raw query?
How can I get the number of rows updated using an update
statement in SQLite in Android?
Note that I need to use some type of raw execute of a SQL statement, rather开发者_Python百科 than do anything with ContentValues
because I need a dynamic query. Thus I can't make use of the SQLiteDatabase.update()
method. For example, I'm running something like
UPDATE my_table
SET field_name = field_name + 1
The methods I know of return void, e.g. SQLiteDatabase.execSQL()
. SQLiteDatabase.rawQuery()
returns a Cursor
, but the cursor has zero rows and its count is always -1.
You could do your insert whichever way you want, and then do a select and use the changes()
function to return the number of affected rows.
To expand on Mat's answer, here's the example code for getting the updated row count:
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();
}
}
Expanding on Mat and Pang's answers...
Could we skip the Cursor and use simpleQueryForLong()
?
e.g.
public long getChangesCount() {
SQLiteDatabase db = getReadableDatabase();
SQLiteStatement statement = db.compileStatement("SELECT changes()");
return statement.simpleQueryForLong();
}
You can use SQLiteStatement.executeUpdateDelete method for this:
SQLiteDatabase db = getReadableDatabase();
SQLiteStatement statement = db.compileStatement("[your sql here]");
int affectedRows = statement.executeUpdateDelete();
The same method used internally in SQLiteDatabase.update(...) methods.
精彩评论