c++ - 如何在sqlite3中检查列数是否改变

标签 c++ c linux sqlite gcc

我正在用 c 编码并使用 sqlite3 作为数据库。我想问一下我们如何检查是否没有。表中的列数是否已更改。情况是这样的,我将根据将在表中添加新列的新可执行文件运行应用程序。因此,当再次创建数据库时,应用程序应检查表架构是否相同,并根据它应该创建表的新模式。我正在为嵌入式环境(特别是设备)开发应用程序。

当我更改数据库中表的列数并在设备中运行新的可执行文件时,由于旧表的存在,新表不会被创建,但是当我删除旧数据库并创建新表时,更改即将到来。那么如何处理这种情况呢?

平台:Linux,gcc编译器 提前致谢

请像这样指导我:(假设旧数据库已经存在)

首先我们必须检查旧数据库的模式,如果某些表有任何变化(比如添加或删除了一些新列),然后根据它创建新的数据库。

最佳答案

使用版本控制和显式列引用

您可以使用数据库版本控制来帮助解决此类问题。

  1. 创建一个只有一列和一条记录的单独表来存储数据库版本。

  2. 每当您升级数据库时,请在单独的表格中设置版本号。

  3. 设计您的插入查询以指定列。

  4. 为新列定义默认值,以便旧程序插入默认值。

例子

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/

相关文章:

linux - 用于处理两个文件并循环进行挂载点检查的 Bash 脚本

linux - 查找: `./folder':没有这样的文件或目录

c# - 保护 API 客户端与 WCF 服务器通信的最简单方法是什么?

c++ - 为什么从 lambda 返回 const 引用会导致临时引用?

c - C语言中的指针和数组

java - 通过 JNI 在 C 中创建的 JVM 不起作用

linux - 添加 svn :keywords in RapidSVN not working in Google Code

c++ - 内核驱动程序读取内存未发送整个字符串

c++ - Nodejs C++ 事件发射器。附加错误。 MakeCallback 中的非函数。方法 = 发出中止陷阱 : 6

c++ - 阻塞套接字 - 检测状态