title: Issue in Sqlite database data clear while update database version in android
body: <p>Hello friends I am making SQLite database in my application by programmatically. </p>
  
  <p>Here is my code:</p>
  
  <pre><code>    public class DatabaseHandler extends SQLiteOpenHelper {
  
      // All Static variables
      // Database Version
      private static final int DATABASE_VERSION =3;
  
      // Database Name
      private static final String DATABASE_NAME = "contactsManager";
  
      // Contacts table name
      private static final String TABLE_CONTACTS = "contacts";
  
      // Contacts Table Columns names
      private static final String KEY_ID = "id";
      private static final String KEY_NAME = "name";
      private static final String KEY_PH_NO = "phone_number";
      private static final String KEY_EMAIL = "email";
      private static final String KEY_ADD = "address";
  
      private final ArrayList&lt;Contact&gt; contact_list = new ArrayList&lt;Contact&gt;();
  
      public DatabaseHandler(Context context) {
      super(context, DATABASE_NAME, null, DATABASE_VERSION);
      }
  
      // Creating Tables
      @Override
      public void onCreate(SQLiteDatabase db) {
      String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
          + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
          + KEY_PH_NO + " TEXT," + KEY_EMAIL + " TEXT,"+ KEY_ADD + " TEXT  )";
      db.execSQL(CREATE_CONTACTS_TABLE);
          System.out.println("Create");
      }
  
      // Upgrading database
      @Override
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      // Drop older table if existed
      db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);
  
          // If you need to add a column
          if (newVersion &gt; oldVersion) {
  
              onCreate(db);
              db.execSQL("ALTER TABLE contacts ADD COLUMN gender TEXT;");
  
          }
      // Create tables again
  
      }
  
      /**
       * All CRUD(Create, Read, Update, Delete) Operations
       */
  
      // Adding new contact
      public void Add_Contact(Contact contact) {
      SQLiteDatabase db = this.getWritableDatabase();
      ContentValues values = new ContentValues();
      values.put(KEY_NAME, contact.getName()); // Contact Name
      values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone
      values.put(KEY_EMAIL, contact.getEmail()); // Contact Email
      // Inserting Row
      db.insert(TABLE_CONTACTS, null, values);
      db.close(); // Closing database connection
      }
  
      // Getting single contact
      Contact Get_Contact(int id) {
      SQLiteDatabase db = this.getReadableDatabase();
  
      Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
          KEY_NAME, KEY_PH_NO, KEY_EMAIL }, KEY_ID + "=?",
          new String[] { String.valueOf(id) }, null, null, null, null);
      if (cursor != null)
          cursor.moveToFirst();
  
      Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
          cursor.getString(1), cursor.getString(2), cursor.getString(3));
      // return contact
      cursor.close();
      db.close();
  
      return contact;
      }
  
      // Getting All Contacts
      public ArrayList&lt;Contact&gt; Get_Contacts() {
      try {
          contact_list.clear();
  
          // Select All Query
          String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;
  
          SQLiteDatabase db = this.getWritableDatabase();
          Cursor cursor = db.rawQuery(selectQuery, null);
  
          // looping through all rows and adding to list
          if (cursor.moveToFirst()) {
          do {
              Contact contact = new Contact();
              contact.setID(Integer.parseInt(cursor.getString(0)));
              contact.setName(cursor.getString(1));
              contact.setPhoneNumber(cursor.getString(2));
              contact.setEmail(cursor.getString(3));
              // Adding contact to list
              contact_list.add(contact);
          } while (cursor.moveToNext());
          }
  
          // return contact list
          cursor.close();
          db.close();
          return contact_list;
      } catch (Exception e) {
          // TODO: handle exception
          Log.e("all_contact", "" + e);
      }
  
      return contact_list;
      }
  
      // Updating single contact
      public int Update_Contact(Contact contact) {
      SQLiteDatabase db = this.getWritableDatabase();
  
      ContentValues values = new ContentValues();
      values.put(KEY_NAME, contact.getName());
      values.put(KEY_PH_NO, contact.getPhoneNumber());
      values.put(KEY_EMAIL, contact.getEmail());
  
      // updating row
      return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
          new String[] { String.valueOf(contact.getID()) });
      }
  
      // Deleting single contact
      public void Delete_Contact(int id) {
      SQLiteDatabase db = this.getWritableDatabase();
      db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
          new String[] { String.valueOf(id) });
      db.close();
      }
  
      // Getting contacts Count
      public int Get_Total_Contacts() {
      String countQuery = "SELECT  * FROM " + TABLE_CONTACTS;
      SQLiteDatabase db = this.getReadableDatabase();
      Cursor cursor = db.rawQuery(countQuery, null);
      cursor.close();
  
      // return count
      return cursor.getCount();
      }
  
     }
  </code></pre>
  
  <p>Issue is when I upgrade my database version from 1 to 2  at that time  new column is added in my database but my old data is deleted so how can I solve this problem? your all suggestion are appreciable. </p>
  
  <p><strong>EDIT</strong></p>
  
  <p>Ya working by solution for both <strong>Rajesh Jadav</strong> and <strong>Amy</strong> <strong>but when i change version form 2 to 3 it give me error like duplicate column gender.</strong> my function is as follows</p>
  
  <pre><code>@Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  // Drop older table if existed
  //db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);
  
      // If you need to add a column
      if (newVersion &gt; oldVersion) {
  
  
          db.execSQL("ALTER TABLE contacts ADD COLUMN gender TEXT;");
          db.execSQL("ALTER TABLE contacts ADD COLUMN dob TEXT;");
  
      }
  
  
  }
  </code></pre>
  
  <p>but when i comment line <code>db.execSQL("ALTER TABLE contacts ADD COLUMN gender TEXT;");</code> then it is working fine so is there are any right way whenever i upgrade database version older changes make comment at that place?</p>