如何在现有 Sqlite DB 中添加新表

Posted

技术标签:

【中文标题】如何在现有 Sqlite DB 中添加新表【英文标题】:How to add a new table in existing Sqlite DB 【发布时间】:2021-07-04 23:20:52 【问题描述】:

我在 sqlite 中创建了一个数据库,并在这个数据库中创建了一个表。现在我想在这个数据库中再添加一个表(posts_table)。 但是当我运行应用程序时,没有在数据库中创建一个新表

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) 
        sqLiteDatabase.execSQL(
                "create table users_table " +
                        "(id integer primary key, username text)"
        );
        sqLiteDatabase.execSQL(
                "create table posts_table " +
                        "(id integer primary key)"
        );
    

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion ) 
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS users_table");
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS posts_table");

        onCreate(sqLiteDatabase);
    

【问题讨论】:

【参考方案1】:

您需要卸载应用程序(数据库文件将被删除,所有当前数据将丢失)或增加数据库版本号,在这种情况下将调用 onUpgrade 方法将删除表(如果它们存在,则会丢失表中的所有数据),然后调用 onCreate 方法。

数据库版本号通常是传递给 SQLiteOpenHelper 的第 4 个参数,但如果您使用构造函数来传递开放参数(在这种情况下它是第 3 个参数),请参阅SQLiteOpenHelper

onCreate 方法只会在数据库的生命周期内自动调用一次,以便数据库持续存在。

【讨论】:

以上是关于如何在现有 Sqlite DB 中添加新表的主要内容,如果未能解决你的问题,请参考以下文章

在 EF 6 和 MVC 5 中使用 Code First 方法将新表添加到现有数据库

prisma db pull 没有看到新表

如何向现有 SQLite 表添加外键?

sqlite创建新表

如何在现有的cloudant nosql数据库中创建/添加新表

sqlite如何添加新字段