Update table using rawQuery() method does not work

You should use db.execSQL() instead db.rawQuery().


Problem solved.

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

Can't works because rawQuery runs the provided SQL and returns a Cursor over the result set.

If I want to return a table I have to use rawQuery, otherwise no!

Increase the value of a record in android/sqlite database


This is because when a rawQuery is executed cursor is returned. Without the call to cursor.moveToFirst() and cursor.close() the database won't get updated.

int idServizo = 150;
String updateQuery ="UPDATE myTable SET sync = 1 WHERE id_servizio = "+idServizio;
Cursor c= dbManager.rawQuery(updateQuery, null);

c.moveToFirst();
c.close();

I dont know the need to call moveToFirst() but this works fine and the database gets updated.


Instead of doing this:

Cursor c= dbManager.RawQuery(updateQuery, null);
c.moveToFirst();
c.close();

You just need this:

dbManager.execSQL(updateQuery, null);

----------------------------------------------------------------------------

Posting answer because sometimes many people (like me) not reading comments. Most popular answer is not correct but Yaqub Ahmad's comment is correct.

Answer from CommonsWare explained in this answer:

rawQuery() is for SQL statements that return a result set. Use execSQL() for SQL statements, like INSERT, that do not return a result set.

----------------------------------------------------------------------------

Documentation for execSQL:

public void execSQL (String sql)

Execute a single SQL statement that is NOT a SELECT or any other SQL statement that returns data.

Documentation for rawQuery:

public Cursor rawQuery (String sql, 
                String[] selectionArgs)

Runs the provided SQL and returns a Cursor over the result set.

Tags:

Sqlite

Android