Получить обновленный счетчик строк из SQLite в Android с помощью необработанного запроса?
Как я могу получить количество строк, обновленных с помощью update
заявление в SQLite в Android?
Обратите внимание, что мне нужно использовать какой-то тип необработанного выполнения оператора SQL, а не делать что-либо с ContentValues
потому что мне нужен динамический запрос. Таким образом, я не могу использовать SQLiteDatabase.update()
метод. Например, я бегу что-то вроде
UPDATE my_table
SET field_name = field_name + 1
Известные мне методы возврата void, например SQLiteDatabase.execSQL()
, SQLiteDatabase.rawQuery()
возвращает Cursor
, но курсор имеет ноль строк и его счетчик всегда равен -1.
4 ответа
Вы можете сделать вставку любым удобным вам способом, а затем сделать выбор и использовать changes()
функция для возврата количества затронутых строк.
Чтобы расширить ответ Мата, вот пример кода для получения обновленного количества строк:
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();
}
}
Расширяя ответы Мэта и Панга...
Можем ли мы пропустить курсор и использовать 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(...).