如何在sqlite3中检查列的数量是否发生了变化
how to check in sqlite3 whether number of columns are changed or not
我在c中编码并使用sqlite3作为数据库。我想问我们如何检查是否没有。表中的列是否被改变了。情况是这样的,我将使用新的可执行文件运行应用程序,根据新列将添加到表中。因此,当再次创建数据库时,应用程序应该检查表模式是否相同,并根据新的模式创建表。我正在为嵌入式环境(特别是设备)开发应用程序。
当我改变数据库中表的列数并在设备中运行新的可执行文件时,由于旧表的存在,新表不会被创建,但是当我删除旧数据库并创建新表时,变化就会到来。那么如何处理这种情况呢?
平台:Linux, gcc编译器提前感谢
请这样引导我:(假设旧DB已经存在)
首先,我们必须检查旧数据库的模式,如果在某些表中有任何变化(如添加或删除一些新列),然后根据这些变化创建新数据库。
使用版本控制和显式列引用
您可以使用数据库版本控制来帮助解决这类问题。
-
创建一个单独的表,只有一列和一条记录来存储数据库版本。
-
无论何时升级数据库,都要在单独的表中设置版本号。
-
设计插入查询来指定列。
-
为新列定义默认值,以便旧程序插入默认值。
UPDATE databaseVersion SET version=2;
版本1查询
INSERT INTO MyTable (id, var1, var2) VALUES (2, '5', '6');
Version 2 Query
INSERT INTO MyTable (id, var1, var2, var3) VALUES (3, '5', '6', '7');
这样,当使用旧程序时,您的查询应该仍然在新数据库上兼容。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- cmath 是否借用了 math.h 的实现
- Gtkmm 会不断检查 Gtk::日历上的所选日期是否发生变化
- 检查是否安装了 windows10 C++
- 这C++代码中发生了什么C++(指数函数)
- sprintf(b, "%" ) 是否定义了?
- 它是否定义了哪些算法可以接受可变 lambda 的实现?
- std::bind 是否实现了 std::ref 和 std::cref 来消除函数调用的歧义?
- libstdc++的make_shared布局在gcc 4.x和gcc 6.x之间是否发生了变化?
- 我是否能够确定在部署一个程序后发生了什么,我在数组末尾写入?
- 是否存在链接类问题?我不知道发生了什么事
- 如何检查整数是否发生过或在读取C 的输入文件时发生了字符
- c_str()的寿命是否在g++4.8.4和g++5.3.1之间发生了变化
- 提升 MSM,如何确定是否发生了转换
- 一个类如何知道他的一个变量中是否发生了什么?
- 如何在sqlite3中检查列的数量是否发生了变化
- 检测表单中任何小部件的状态是否发生了变化
- 在这两种包含相同标头的方式之间,编译器中是否发生了不同的事情
- 如何检查c++类描述是否发生了更改?