简体   繁体   中英

No error when updating database with sqlite but it is not getting updated (android application)

I try to update my database using sqlite. Everything runs good but the database is not being updated. I have used this databate for storing users in it. But when I want to update it, it is not working.

The logcat is empty

This is the function where I try to update by hardcoding it:

 public void updateUser(String email, String total_usage) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.rawQuery("UPDATE login SET total_usage = 132 WHERE email = 'sampleMail'", null);
        db.rawQuery("UPDATE login SET total_usage = 132 WHERE email = 'sampleMail'", null);
    }

Maybe the issue is somewhere else. Here is the complete java file:

public class DatabaseHandler extends SQLiteOpenHelper {

    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "android_api";

    // Login table name
    private static final String TABLE_LOGIN = "login";

    // Login Table Columns names
    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";
    private static final String KEY_EMAIL = "email";
    private static final String KEY_UID = "uid";
    private static final String KEY_CREATED_AT = "created_at";
    private static final String KEY_TOTAL_USAGE = "total_usage";

    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "("
                + KEY_ID + " INTEGER PRIMARY KEY," 
                + KEY_NAME + " TEXT,"
                + KEY_EMAIL + " TEXT UNIQUE,"
                + KEY_UID + " TEXT,"
                + KEY_CREATED_AT + " TEXT,"
                + KEY_TOTAL_USAGE + " TEXT);";
        db.execSQL(CREATE_LOGIN_TABLE);
    }

    // Upgrading database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_LOGIN);

        // Create tables again
        onCreate(db);
    }

    /**
     * Storing user details in database
     * */
    public void addUser(String name, String email, String uid, String created_at) {
        SQLiteDatabase db = this.getWritableDatabase();


        ContentValues values = new ContentValues();
        values.put(KEY_NAME, name); // Name
        values.put(KEY_EMAIL, email); // Email
        values.put(KEY_UID, uid); // Email
        values.put(KEY_CREATED_AT, created_at); // Created At
    //    values.put(KEY_TOTAL_USAGE, total_usage); // Total_usage

        // Inserting Row
        db.insert(TABLE_LOGIN, null, values);

        db.close(); // Closing database connection
    }

    /**
     * Storing user details in database
     * */
    public void updateUser(String email, String total_usage) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.rawQuery("UPDATE login SET total_usage = 132 WHERE email = 'sampleMail'", null);
        db.rawQuery("UPDATE login SET total_usage = 132 WHERE email = 'sampleMail'", null);
    }

    /**
     * Getting user data from database
     * */
    public HashMap<String, String> getUserDetails(){
        HashMap<String,String> user = new HashMap<String,String>();
        String selectQuery = "SELECT  * FROM " + TABLE_LOGIN;

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        // Move to first row
        cursor.moveToFirst();
        if(cursor.getCount() > 0){
            user.put("name", cursor.getString(1));
            user.put("email", cursor.getString(2));
            user.put("uid", cursor.getString(3));
            user.put("created_at", cursor.getString(4));
        }
        cursor.close();
        db.close();
        // return user
        return user;
    }

    /**
     * Getting user login status
     * return true if rows are there in table
     * */
    public int getRowCount() {
        String countQuery = "SELECT  * FROM " + TABLE_LOGIN;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        int rowCount = cursor.getCount();
        db.close();
        cursor.close();

        // return row count
        return rowCount;
    }

    /**
     * Re crate database
     * Delete all tables and create them again
     * */
    public void resetTables(){
        SQLiteDatabase db = this.getWritableDatabase();
        // Delete All Rows
        db.delete(TABLE_LOGIN, null, null);
        db.close();
    }
}

I could not what I am doing wrong. Hopefully someone can see it. Here is a similar problem: Android SQLite update query not working? But it did not solve my problem. I am getting desperate, I would really really appreciate it if someone could help me.

Here is a picture of my database(Not enough reputation for uploading images): http://nl.tinypic.com/r/mm8nxg/8


Code below is not working:

    public void updateUser(String email, String total_usage) {
        String selectQuery = "UPDATE login SET total_usage = 132 WHERE email = 'sampleMail'";

        SQLiteDatabase db = this.getWritableDatabase();

        db.execSQL(selectQuery);
}
 db.rawQuery("UPDATE login SET total_usage = 132 WHERE email = 'sampleMail'", null); db.rawQuery("UPDATE login SET total_usage = 132 WHERE email = 'sampleMail'", null); 

Use execSQL() and not rawQuery() for queries like this.

rawQuery() just compiles the SQL but does not run it. execSQL() both compiles and runs it. (The SQL with rawQuery() gets only executed when you move the returned cursor.)

You need to have your original DB creation scripts, but you also need to tell the DB what changes you want.

For me, I created this string:

        private static final String ALTER_TABLE = 
             "ALTER TABLE player ADD COLUMN showscores INTEGER default 1";

and that will add a column to my existing DB. But I have to make that happen in onUpgrade.

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ". No data will be destroyed");
            if (oldVersion != newVersion) {
                db.execSQL(ALTER_TABLE);
            }
        }

In constructor

public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME", null, DATABASE_VERSION); // be aware of that number, when you change your db add one plus
    this.onCreate(this.getWritableDatabase());
}

and below

@Override
public void onCreate(SQLiteDatabase db) {

    db.execSQL(createTable);//execute all querys to create it
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM