我正在用 c 编码并使用 sqlite3 作为数据库。我想问一下我们如何检查是否没有。表中的列数是否已更改。情况是这样的,我将根据将在表中添加新列的新可执行文件运行应用程序。因此,当再次创建数据库时,应用程序应检查表架构是否相同,并根据它应该创建表的新模式。我正在为嵌入式环境(特别是设备)开发应用程序。
当我更改数据库中表的列数并在设备中运行新的可执行文件时,由于旧表的存在,新表不会被创建,但是当我删除旧数据库并创建新表时,更改即将到来。那么如何处理这种情况呢?
平台:Linux,gcc编译器 提前致谢
请像这样指导我:(假设旧数据库已经存在)
首先我们必须检查旧数据库的模式,如果某些表有任何变化(比如添加或删除了一些新列),然后根据它创建新的数据库。
最佳答案
使用版本控制和显式列引用
您可以使用数据库版本控制来帮助解决此类问题。
创建一个只有一列和一条记录的单独表来存储数据库版本。
每当您升级数据库时,请在单独的表格中设置版本号。
设计您的插入查询以指定列。
为新列定义默认值,以便旧程序插入默认值。
例子
UPDATE databaseVersion SET version=2;
版本 1 查询
INSERT INTO MyTable (id, var1, var2) VALUES (2, '5', '6');
版本 2 查询
INSERT INTO MyTable (id, var1, var2, var3) VALUES (3, '5', '6', '7');
这样,您的查询在使用旧程序时仍应在新数据库上兼容。
关于c++ - 如何在sqlite3中检查列数是否改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8337232/