Search code examples
androidsqliteandroid-sqliteupdating

android sqlite - table data cannot be updated


the table ( i.e. vaccines) structure is :

id- auto increment primary key

dose1_date - string

dose2_date - string

The DatabaseAccessor class is as follows. The initDB() and setVaccineDates methods are called from another activity. But the database is not updated. The logged message is found in the logcat however. The DatabaseHelper class is not shown here.

public class DatabaseAccessor {

    public static DataBaseHelper myDbHelper = null;
    public static SQLiteDatabase rdb = null;
    public static SQLiteDatabase wdb = null;

    public static synchronized final void initDB(Context context) throws Exception {
        if (myDbHelper == null) {
            myDbHelper = new DataBaseHelper(context);
            myDbHelper.openDataBase();
            rdb = myDbHelper.getReadableDatabase();
            wdb = myDbHelper.getWritableDatabase();
        }
    }



    public static void setVaccineDates(String birthDate) throws SQLException{


        try {
            String[] selections = null;
            String qry = null;
            qry = "select * from vaccines  order by id";

            Cursor cursor = wdb.rawQuery(qry, selections);

            Log.d("update  qry===== ", qry);

            while (cursor.moveToNext()) {
                int rowID = Integer.parseInt(cursor.getString(0));

                ContentValues values = new ContentValues();
                values.put("dose1_date","66666");
                values.put("dose2_date","7777");
                wdb.update("vaccines", values, "id=?", new String[] {String.valueOf(rowID)});

                //wdb.close();
            }
            cursor.close();
        } catch (Exception e) {
            e.printStackTrace();

        }



    }// end of  method  setVaccineDates

}

What to do ?

Edit : If I uncomment the wdb.close() line , I see in logcat

'06-09 04:21:05.387: W/System.err(4144): java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/data/com.cloudsoft.vaccine/databases/vaccines2.db '


Solution

  • As a newbie in android it was just a mistake out of ignorance that this situation took place: after update operation I tried to find the changes in the database file (i.e. file with .db extension sitting inside assets folder in Eclipse) through sqlite browser . But what actually happens is the app running in the device (real one or emulator) has its own database which is created from the .db extension file inside assets folder and consequent database operations only affect the app's own database leaving no touch on the database inside the mentioned folder in Eclipse. And there is the way to watch the app's very own database in the running device in Eclipse's 'File Explorer' (in DDMS mode) with the help of Questoid SQlite Manager