如何在Android中使用sqlite获取更新的行数?

时间:2016-12-18 14:43:31

标签: android sql sqlite

我正在使用android中的sqlite数据库开发一个应用程序。 这是我的表DDL代码。

c = 0b11101111010111

这是我的更新sql代码。

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" +
")");

当然,我可以使用update()和changes()函数。 但我想使用execSQL()函数。

我可以使用execSQL()函数获取更新行的数量吗?

2 个答案:

答案 0 :(得分:2)

SQLite C API中,在程序执行UPDATE语句后,可以通过调用sqlite3_changes()来确定更改行的数量。

在Android框架中,调用sqlite3_changes()的唯一位置是update()方法。

如果您需要为update()执行过于复杂的更新,则必须执行第二个查询以调用内置changes() function

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);

答案 1 :(得分:-1)

    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();
            }
        }

那应该给你刚刚更新的行的id