用sqlite和c++对数据库表进行排序的最佳方法是什么
Best way to actually sort a database table with sqlite and in c++?
我需要对一个表进行永久排序。我无法控制数据库或其表的创建方式。我有一个用c++编写的程序,它有几种方法可以对数据库及其表执行不同的操作。例如,打印、调用行、更新行、下载行、更新列和列表继续
我目前在排序数据库中。它需要根据指定的列对数据库进行实际排序,如果用户指定了另一列,则可以按另一列进行子排序。因此,在排序完成后,如果使用第三方应用程序查看,则所有数据都将显示为已排序。
我知道SELECT*FROM table1 ORDER BY Col1,Col2会返回排序后的表,但从实际的内存立场来看,所有数据都是一样的,所以如果ORDER BY之后col 1都乱了,数据库查看器仍然会显示col 1。排序后,应该对数据库中的数据进行排序,当在数据库查看器中查看时,所有数据都按顺序排列。
这是我第一篇文章的完整编辑。fyi
通过@RogerRowland的帮助,我能够解决这个问题,但对于那些想和我做同样事情的人来说。我不知道你为什么真的想这么做,但如果你需要对数据库表的数据进行排序,而不仅仅是返回排序后的数据,并且使用sqlite3和c++,这就是你想要做的。
步骤1)
rc = sqlite3_prepare(this->dbPointer, "CREATE [TEMP] VIEW tempViewOfSortedTable AS SELECT * FROM tableName ORDER BY columnName", -1, &ppStmt, NULL);
步骤2)获取所有表信息(列名和类型以及其他信息)并将其存储在字符串中。
rc = sqlite3_prepare_v2(this->dbPointer, "pragma table_info tableName", -1, &ppStmt, NULL);
步骤3)创建一个与原始表具有相同列和属性的新表。
sprintf(strQuery, "CREATE TABLE tempUserTable (%s)", strListOfFieldsAndTypes);
if (rc == SQLITE_OK)rc = sqlite3_exec (this->dbPointer, strQuery, NULL, NULL, &errMsg);
步骤4)将视图的所有排序数据复制到新表中。
sprintf(strQuery, "INSERT INTO tempUserTable SELECT %s FROM tempViewOfSortedTable", strListOfFields);
if (rc == SQLITE_OK)rc = sqlite3_exec (this->dbPointer, strQuery, NULL, NULL, &errMsg);
步骤5)删除旧表
if (rc == SQLITE_OK)rc = sqlite3_exec (this->dbPointer, "DROP TABLE tableName", NULL, NULL, &errMsg);
步骤6)如果需要,请将新表重命名为旧名称。
if (rc == SQLITE_OK)rc = sqlite3_exec (this->dbPointer, "ALTER TABLE tempUserTable RENAME TO 'tableName'", NULL, NULL, &errMsg);
如果您没有创建临时视图,或者在关闭数据库之前要重复此操作,您可能还想删除该视图,因为如果您不创建,临时视图将持续到关闭数据库。
此外,无论如何不要声称这是一条快速路线。我使用sqlite3_exec的唯一原因是,我回收了其他人的旧代码。我将自己用sqlite3_prepare_v2替换它,但我想为其他有同样问题的人解决这个问题。
来源。
http://www.sqlite.org/lang_createview.html
http://www.sqlite.org/capi3ref.html
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- C++ 最佳键值容器,可按值排序,并可快速删除
- 根据特定数据对字符串进行排序的最佳方法是什么
- 这是用于对二维数组进行排序的最佳方法
- 最佳排序的c++容器
- 用sqlite和c++对数据库表进行排序的最佳方法是什么
- 按降序排序的最佳方式
- 快速排序最佳情况比平均情况更糟糕
- 以最佳方式排序
- C# 与 C/C++:我是否需要手动对结构字段进行排序以获得最佳性能
- 用于排序/操作/排序的最佳替代算法
- 排序列表的最佳数据结构(性能)
- 在N个未排序的数字中搜索给定值的最佳方法
- 降序排序的最佳方式是什么
- 排序后查找元素在未排序数组中的位置的最佳方法
- 通过索引向量对犰狳矩阵的所有列进行排序的最佳方法
- 从文本文件中读取字典并将其存储在排序容器中的最佳方法是什么?
- 如何在不知道宽度或高度的情况下对矩形的角进行最佳排序
- 检查矢量是否排序的最佳算法