如何更新SQLite数据库,而不是丢失所有现有的数据?

我正在给应用程序的SQLite数据库添加一个表格。 我所有的语法都很好,而不是问题。 但我有一些麻烦,得到正确的创build新的表。 我加了新的桌子….

@Override public void onCreate(SQLiteDatabase db) { db.execSQL(DATABASE_CREATE); db.execSQL(CREATE_REQUESTS); db.execSQL(CREATE_OVERRIDE); } 

我在创build方法。 我有3张桌子。 当我更新版本号,我得到一个错误,说:“表请求(指CREATE_REQUESTS)已经被创build”。 看看我的onUpgrade方法…

 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS contacts"); onCreate(db); } 

导致我明白,在onCreate方法中引用我的DATABASE_CREATE表的db.execSQL("DROP TABLE IF EXISTS contacts")db.execSQL("DROP TABLE IF EXISTS contacts")用于删除旧表,然后是下一行onCreate(db); 重新创build它。 我没有将请求添加到该execSQL行,这是什么导致了错误。 这是问题:我宁愿不丢失我已经拥有的两个表中的数据。 有没有办法像我想要做的那样添加表格,而不是丢失所有的旧数据? 谢谢。

Solutions Collecting From Web of "如何更新SQLite数据库,而不是丢失所有现有的数据?"

你可以在onUpgrade做任何你想做的事情。 您可以使用ALTER将新列添加到您的表中。

最糟糕的情况是,如果您的模式完全不同,则必须创build新表,使用旧表中的数据填充它,然后删除旧表。

在任何情况下, onUpgradedevise都是为了平滑升级而不会丢失任何数据。 这是由你来正确地实施。

如果数据库版本:6

 Ex : There is a table with 5 columns 

当你升级到:7 (我在3个表中添加1个新列)

  1. We need to add the columns when creating a table 2. onUpgrade method: if (oldVersion < 7) { db.execSQL(DATABASE_ALTER_ADD_PAPER_PAID); db.execSQL(DATABASE_ALTER_LAST_UPLOADED); db.execSQL(DATABASE_ALTER_PAPER_LABEL); } 

其中:“DATABASE_ALTER_ADD_PAPER_PAID”是查询。

 EX: public static final String DATABASE_ALTER_ADD_PAPER_PAID = "ALTER TABLE " + TableConstants.MY_PAPERS_TABLE + " ADD COLUMN " + COLUMN_PAPER_PAID + " TEXT;"; 

经过以上两个操作,对于全新安装的用户和应用升级用户来说,这将工作得很好