Как получить обновленное количество строк с помощью sqlite в Android?

Я разрабатываю приложение с использованием базы данных sqlite в Android. Вот мой DDL-код таблицы.

db.execSQL("CREATE TABLE 'ad_img' (" +
"'ad_img_uid'  INTEGER PRIMARY KEY AUTOINCREASE NOT NULL," +
"'ad_uid'  INTEGER," +
"'ad_img_url'  TEXT(255) NOT NULL," +
"'ad_img_local'  TEXT(255) NOT NULL" +
")");

И это мой код обновления sql.

public int updateLocalPathTOAdImg(int ad_uid, String ad_img_url, String ad_img_local) {
        int result = 0;

        try {
            String sql = "UPDATE 'ad_img' SET " +
                    "'ad_img_local' = '" + ad_img_local + "' " +
                    "WHERE 'ad_uid' = " + ad_uid + " AND 'ad_img_url' = '" + ad_img_url + "'";
            m_db.execSQL(sql);

            return result;  ///////updated row count??
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return result;
    }

Конечно, я могу использовать функции update() и change(). Но я хочу использовать функцию execSQL().

Могу ли я получить количество обновленных строк с помощью функции execSQL()?


person Star_Man    schedule 18.12.2016    source источник


Ответы (2)


В SQLite C API после того, как программа выполнила инструкцию UPDATE, число измененные строки можно определить, вызвав sqlite3_changes().

В среде Android единственным местом, где вызывается sqlite3_changes(), является метод update().

Если вам нужно выполнить ОБНОВЛЕНИЕ, которое слишком сложно для update(), вам нужно выполнить второй запрос, чтобы вызвать встроенный changes():

db.execSQL("UPDATE ...");
long changes = DatebaseUtils.longForQuery(db, "SELECT changes()", null);

Кроме того, вы можете включить устаревшие PRAGMA count_changes (надеясь, что он доступен), чтобы вернуть число из самого оператора UPDATE, как если бы это был запрос:

class MyOpenHelper {
    ...
    void onConfigure(SQLiteDatabase db) {
        db.execSQL("PRAGMA count_changes = ON");
    }
}

...

changes = DatebaseUtils.longForQuery(db, "UPDATE ...", null);
person CL.    schedule 18.12.2016
comment
Я не могу найти класс DatabaseUtils. Где это находится? библиотека или утилита? - person Star_Man; 18.12.2016
comment
android.database.DatabaseUtils - person CL.; 18.12.2016

    public int getSingleRow(String food_name){
            SQLiteDatabase myDb = getReadableDatabase();
            Cursor cursor = null;
            int value=0;
            try{
                cursor = myDb.rawQuery("SELECT quantity FROM table_food_palate WHERE name=?",new String[]{food_name});
                if (cursor.getCount() >0){
                    cursor.moveToFirst();
                    value = Integer.parseInt(cursor.getString(cursor.getColumnIndex("id")));
//id stands for the column name called id                    
Log.e("TAG","Value has been saved");
                }
                return value;
            } finally {
                cursor.close();
                myDb.close();
            }
        }

Это должно дать вам идентификатор строки, которую вы только что обновили.

person Idee    schedule 18.12.2016