gpt4 book ai didi

c++ - Qt 在从 SQLite 内存数据库中选择时进行浅拷贝

转载 作者:行者123 更新时间:2023-11-28 06:40:56 26 4
gpt4 key购买 nike

是否有可能对存储在 SQLite 内存数据库中的内容进行浅拷贝?

Qt 提供(与 SQLite 互连)在内存级别操作 SQLite 数据库的可能性;然而,在选择行时,数据通常会被深度复制(然而,这对于非内存数据库来说是必需的)。主要问题是通过对已经存储在内存中的数据进行深度复制,我会使内存消耗加倍 - 但是避免这种加倍消耗会很好,否则任何内存数据库的方法似乎都没有用因为我无法对内存中存储为 char* 的数据执行任何特定操作。

是否有一种无需复制现有数据即可从 char* 转换为 QVariant* 的简单方法?可能继承 QSqlRecord 或覆盖 sqlite 驱动程序!?

结果应该是我能够在内存数据库中使用 SQLite,就像我使用 Qt 的“标准”容器类(如 QMap、QHash、QList 等)一样,这些容器类由“原始数据”的浅拷贝组成"- 这样我就可以将这些浅层复制的对象/对象结构传递给其他类,例如 QStandardItem,使它们在 QTableView 中可见。

最佳答案

这个问题和Qt没有太大关系,因为sqlite没有提供这个功能。您需要直接访问 sqlite 数据库表示中的数据。由于此内存可以随时移动,因此您获得的任何指针仅在下一个 SQL 命令之前有效。

如果您要这样做,您需要修改 sqlite 以公开对数据的内存数据库表示的直接访问。

唉,我认为你有过早优化的情况。当 Qt 访问数据库时,它不会复制数据库的所有内容,而只会复制运行查询的结果。如果您要完整查询数据库的所有表,这只会使内存使用“加倍”。如果你这样做,你会遇到更大的问题,因为这样的设计会导致非常糟糕的用户体验。

关于c++ - Qt 在从 SQLite 内存数据库中选择时进行浅拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25970746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com