1

我的应用程序中有一个 SQLite 数据库,现在我对应用程序、值等进行了一些更改,需要重命名(或删除并添加新)列。

我首先只是重命名了列名,但现在我得到了

sqlite.sqliteexception no such column error...

我应该使用一些不同的方法来更改表(列名)而不是这种显然返回此错误的业余直接方法吗?

更新

诀窍在于更改数据库版本:

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

   @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){

            Log.w(DatabaseManidzer.class.getName(),"Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");

            db.execSQL("DROP TABLE IF EXISTS " + TABLE_VNOSI);
            onCreate(db);

        }
4

3 回答 3

3

是的,如果您使用的是 DatabaseHelper,那么有一种方法可以升级数据库模式。

你可以找到很多关于这样做的教程。

这是一个。 Android 更新 SQLite DB 架构?

您正在寻找的方法是 onUpgrade

并且不要重命名引用实际表列的变量,除非您先更改实际列名。你将不得不使用 sql 查询来做你想做的事。

于 2013-10-04T20:12:30.410 回答
0

您可以简单地在 onUpgrade 方法中添加一个 ALTER TABLE 查询,然后不要忘记在您的帮助类中增加 DB 版本,这样您就可以将现有数据保留在表中。或者,如果您仍在开发中,只需删除表并使用新更改重新创建它。如果你给我一个你想要成功的例子,我可能会帮助你更多。

谢谢。

于 2013-10-04T22:05:45.160 回答
0

如果数据库版本:6 例如:有一个包含 5 列的表

当您升级到:7

  1. 我们需要在创建表时添加列
  2. onUpgrade 方法:

    if (oldVersion < 7)
    { db.execSQL(DATABASE_ALTER_ADD_PAPER_PAID); db.execSQL(DATABASE_ALTER_LAST_UPLOADED); db.execSQL(DATABASE_ALTER_PAPER_LABEL); }

经过以上两次操作后,全新安装用户和应用升级用户都可以正常使用

问候维诺德

于 2017-09-26T09:57:27.347 回答