Sandip Armal Patil
Sandip Armal Patil

Reputation: 5905

How to update table in sqlite?

I have two table first is "TABLE_SUBJECT" and second is "TABLE_CHAPTER".Now i want to
add some column and delete previous. My question is that how to do that. i try to update but
it display previous not new. I need to delete previous and update table with new column.
I change version number but it not working. Please give me hint or reference.

Here is my some code of SQLite:

@Override
public void onCreate(SQLiteDatabase database) {

    database.execSQL(DATABASE_CREATE);
    database.execSQL(DATABASE_CREATE1);

}

 @Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub
    Log.w(MySQLiteHelper.class.getName(), "Upgrading database from version "
            + oldVersion + " to " + newVersion
            + ", which will destroy all old data");
    database.execSQL("DROP TABLE IF EXISTS " + TABLE_SUBJECT);
    database.execSQL("DROP TABLE IF EXISTS" + TABLE_CHAPTER);
    onCreate(database);
}

Upvotes: 3

Views: 10691

Answers (2)

Android
Android

Reputation: 1427

you try this code

public long update_todo_not(String a, String b, String c, String d,
        String e, String f, String g, String id) {
     ContentValues con = new ContentValues();

     con.put("title", a);
     con.put("description", b);
     con.put("due_date", c);
     con.put("alarm_time", d);
     con.put("category", e);
     con.put("alarm_set",f);
     con.put("priority", g);
     Log.v("priority", g+"");
     return mDb.update(DATABASE_TABLE_TODO_LIST, con, "id ='" + id + "'",null);

}

Upvotes: 6

Gabriel Ittner
Gabriel Ittner

Reputation: 1162

You can't delete columns in SQLite. There is a workaround descriped here in the FAQ.

To add a a new column you could simply increase the database version and change the create strings you got to the desired database layout (remove the column you want to delete and add the other). When the database is next opened onUpgrade is called, which will delete the existing tables. After that the changed tables are created. This isn't a good method, because you loose all data in the database.

To add a new column without loosing all data use you have to change the onUpgrade method to something like this (this anticipates that you current database version is 1, if not simply change the number at case) and than increase the database version:

@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
    switch (oldVersion) {
    case 1: 
        database.execSQL("ALTER TABLE " + 
            TABLE_SUBJECT + " ADD COLUMN " + KEY_NEWCOLUMN + " text not null");
        database.execSQL("ALTER TABLE " + 
            TABLE_CHAPTER + " ADD COLUMN " + KEY_NEWCOLUMN + " text not null");
    }
}

This method is scalable, because when there are new changes you can simply add case 2, case 3... Do not add break at the end of case. This way if an app update increases the version to 3 and the updated app is still on 1 (maybe it missed an update) all changes are applied.

Here you can find the documentation for alter table. The sqlite site (sqlite.org) is in general a great help to find this kind of things.

Upvotes: 3

Related Questions