Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在sqlite3中检查列数是否更改_C++_C_Linux_Sqlite_Gcc - Fatal编程技术网

C++ 如何在sqlite3中检查列数是否更改

C++ 如何在sqlite3中检查列数是否更改,c++,c,linux,sqlite,gcc,C++,C,Linux,Sqlite,Gcc,Iam用c编码并使用sqlite3作为数据库。我想问的是,我们如何检查表中的列数是否发生了更改。情况是这样的,我将使用新的可执行文件运行应用程序,根据新的可执行文件在表中添加新列。因此,当再次创建数据库时,应用程序应检查表架构是否相同,并根据新架构创建表。Iam正在为嵌入式环境开发应用程序(专门针对设备) 当iam更改数据库中表的列数并在设备中运行新的可执行文件时,由于存在旧表,不会创建新表,但当iam删除旧数据库并创建新表时,则会发生更改。因此,如何处理这种情况 平台:Linux,gcc编译器

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

当iam更改数据库中表的列数并在设备中运行新的可执行文件时,由于存在旧表,不会创建新表,但当iam删除旧数据库并创建新表时,则会发生更改。因此,如何处理这种情况

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

请这样引导我:(假设旧DB已经存在)

首先,我们必须检查旧数据库的模式,如果某些表(如添加或删除的一些新列)有任何更改,则根据这些更改创建新数据库。

使用版本控制和显式列引用 您可以利用数据库版本控制来帮助解决这类问题

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

  • 每当升级数据库时,请在单独的表中设置版本号

  • 设计插入查询以指定列

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

  • 例子 版本1查询 版本2查询
    这样,在使用旧程序时,您的查询应该仍然与新数据库兼容。

    我不想在开始时插入值。之后会发生这种情况……请告诉我在添加或删除一些新列时如何创建数据库(假设旧数据库也已存在)
    UPDATE databaseVersion SET version=2;
    
    INSERT INTO MyTable (id, var1, var2) VALUES (2, '5', '6');
    
    INSERT INTO MyTable (id, var1, var2, var3) VALUES (3, '5', '6', '7');