Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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++ 在删除行sqlite后,如何重新索引或修复rowid?_C++_Sql_Database_Sqlite - Fatal编程技术网

C++ 在删除行sqlite后,如何重新索引或修复rowid?

C++ 在删除行sqlite后,如何重新索引或修复rowid?,c++,sql,database,sqlite,C++,Sql,Database,Sqlite,好吧,我现在的处境相当困难,至少我认为是这样。我一直在研究如何解决我的问题,但结果却是空手而归 删除一行后,我需要能够重新索引表的rowid。这样,在任何给定的时间,当我想通过rowid更新或索引一行时,它正在访问正确的行 现在对于那些问为什么的人来说。基本上我连接的是一个自制的数据库,它是用C语言编程的,实际上只是一堆内存位置,所有的访问都像数据库表一样。所以我想说的是,他们可以通过在表中搜索一个值来查找一行,或者简单地说我想要第6行。最后,表可以由任何内容和任何值组成,这意味着它们不会创建列

好吧,我现在的处境相当困难,至少我认为是这样。我一直在研究如何解决我的问题,但结果却是空手而归

删除一行后,我需要能够重新索引表的rowid。这样,在任何给定的时间,当我想通过rowid更新或索引一行时,它正在访问正确的行

现在对于那些问为什么的人来说。基本上我连接的是一个自制的数据库,它是用C语言编程的,实际上只是一堆内存位置,所有的访问都像数据库表一样。所以我想说的是,他们可以通过在表中搜索一个值来查找一行,或者简单地说我想要第6行。最后,表可以由任何内容和任何值组成,这意味着它们不会创建列作为索引,最终,我唯一可以按行编号索引它们的内容就是我所知道的rowid

所以我发现VACUUM可以做我想做或需要做的事情,但是数据库所在的系统似乎没有授予sqlite写入权限,所以当VACUUM运行时,返回时会出现错误。错误14或无法打开数据库文件我也知道我的数据库是打开的,所以这不是问题,但没有写权限是我能想出的唯一原因我也读了一些关于自动增量或类似的东西,但我真的不理解/认为这能解决我的问题


任何来自sqlite或数据库天才的建议或想法都将不胜感激

不确定我是否完全理解了您的问题,但是如果您可以使用SQL代码,那么您可以编写一个查询来更新ID,假设它们的顺序是密集的

您可以使用如下查询:

更新t1 设置id=选择等级 从选择id, 选择计数+1 从中选择不同的id 从t1到t 其中t.id你可以查看我的演示。在本演示中,如果同时运行所有查询,您将看到DELETE和UPDATE语句的结果,以模拟您的情况

我不知道为什么我没有想到只更新rowid列:/这两种方式都是肯定的,而且我认为我不知道如何编写查询。非常感谢你。