Получить обновленный счетчик строк из SQLite в Android с помощью необработанного запроса - PullRequest
8 голосов
/ 12 июля 2011

Как я могу получить количество строк, обновленных с помощью оператора update в SQLite в Android?

Обратите внимание, что мне нужно использовать какой-то тип необработанного выполнения оператора SQL, а не делать что-либо сContentValues потому что мне нужен динамический запрос.Таким образом, я не могу использовать метод SQLiteDatabase.update().Например, я запускаю что-то вроде

UPDATE my_table 
   SET field_name = field_name + 1

Методы, которые я знаю о return void, например, SQLiteDatabase.execSQL().SQLiteDatabase.rawQuery() возвращает Cursor, но курсор имеет нулевые строки и его счетчик всегда равен -1.

Ответы [ 4 ]

16 голосов
/ 12 июля 2011

Вы можете выполнить вставку любым удобным вам способом, а затем сделать выбор и использовать функцию changes(), чтобы получить количество затронутых строк.

11 голосов
/ 26 августа 2013

Чтобы расширить на ответ Мэта , вот пример кода для получения обновленного количества строк:

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();
    }
}
4 голосов
/ 12 сентября 2015

Расширение ответов Мэтта и Пэнг ...

Можем ли мы пропустить Курсор и использовать simpleQueryForLong()?

например,

public long getChangesCount() {
    SQLiteDatabase db = getReadableDatabase();
    SQLiteStatement statement = db.compileStatement("SELECT changes()");
    return statement.simpleQueryForLong();
}
1 голос
/ 14 сентября 2016

Для этого можно использовать метод SQLiteStatement.executeUpdateDelete:

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

Тот же метод, который используется внутри методов SQLiteDatabase.update (...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...