C++ 如何取消长时间运行的QSqlQuery?
如何取消长时间运行的QSqlQuery 数据库正在返回3M+行,如QTableView控件所示。我希望能够强制停止这两项长期操作:C++ 如何取消长时间运行的QSqlQuery?,c++,qt5,qsqlquery,qsqldatabase,C++,Qt5,Qsqlquery,Qsqldatabase,如何取消长时间运行的QSqlQuery 数据库正在返回3M+行,如QTableView控件所示。我希望能够强制停止这两项长期操作: 当数据库运行长时间操作时 如果数据库速度很快,但需要返回大量的行,那么处理/复制/显示这些行会花费很多时间 第二个项目符号,可以通过不使用QSqlQueryModel来解决。在这种情况下,可以分阶段手动解析查询结果,这将得到实现,但我也想知道是否可以中断和取消移动data DB->QTableView的过程 我尝试过以下方法但没有成功: QSqlQuery::fi
- QSqlQuery::finish()
- QFuture::cancel()
- QSQLDABASE.close()--这一个使应用程序崩溃
on_button_stopQuery_released
在执行过程中中止查询(不是抓取,这是QSqlQuery::finish所做的)在所有数据库中都是偶然的。Qt本身不支持这一点;解决方法将是后端特定的 例如,使用PostgreSQL可以执行以下操作:
- 在原始连接中,检索连接ID(
)并保存它选择pg_backend_pid();
- 当您想中止查询时,打开第二个连接并通过发出
SELECT pg\u cancel\u backend(保存的\u id)终止查询代码>
sqlite3\u中断(sqlite3*)
。这会中断查询,并且不会关闭连接
MySQL与PostgreSQL类似:
- 首先检索连接ID(
)选择连接ID();
- 然后通过另一个连接杀死它(
)kill[connection | QUERY]$connection\u id
class I连接取消:
def寄存器(连接):
#保存/检索连接ID
def cancel():
#打开第二个连接,发送后端特定查询
对于大的结果集,在模型中考虑使用<代码> CANTFEXMORE 和<代码> FETCHOMENE/CODE>。这样,在向用户显示某些结果之前,您不必处理整个结果集;使用起来可能会感觉更平滑。当然,由于order by或grouping子句等原因,这对固有的查询执行延迟没有帮助。
在执行期间中止查询(不是获取,这是QSqlQuery::finish所做的)在所有数据库中都是命中和未命中的。Qt本身不支持这一点;解决方法将是后端特定的 例如,使用PostgreSQL可以执行以下操作:- 在原始连接中,检索连接ID(
)并保存它选择pg_backend_pid();
- 当您想中止查询时,打开第二个连接并通过发出
SELECT pg\u cancel\u backend(保存的\u id)终止查询代码>
sqlite3\u中断(sqlite3*)
。这会中断查询,并且不会关闭连接
MySQL与PostgreSQL类似:
- 首先检索连接ID(
)选择连接ID();
- 然后通过另一个连接杀死它(
)kill[connection | QUERY]$connection\u id
class I连接取消:
def寄存器(连接):
#保存/检索连接ID
def cancel():
#打开第二个连接,发送后端特定查询
对于大的结果集,在模型中考虑使用<代码> CANTFEXMORE 和<代码> FETCHOMENE/CODE>。这样,在向用户显示某些结果之前,您不必处理整个结果集;使用起来可能会感觉更平滑。当然,由于order by或grouping子句等原因,对固有的查询执行延迟没有帮助。
fetchMore是否真的适用于postgres?文档说明它只适用于不报告数据集大小(即行数)的数据库。在postgres中,它似乎加载了所有行……啊,我看到您正在使用QSqlQueryModel。在这种情况下,fetchMore是否真的可以用于postgres?文档说明它只适用于不报告数据集大小(即行数)的数据库。在postgres中,它似乎加载了所有行……啊,我看到您正在使用QSqlQueryModel。那样的话,没有。