首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QSqlDatabase事务、QSqlQuery创建和QSqlQuery完成

QSqlDatabase事务、QSqlQuery创建和QSqlQuery完成
EN

Stack Overflow用户
提问于 2013-08-19 04:49:28
回答 1查看 3K关注 0票数 1

我注意到QSqlDatabase文档说

注释:在使用事务时,必须在创建查询.之前启动事务。”

这是否限制了QSqlQuery::prepare()在事务情况下的有用性,如果您必须在启动事务之后才创建查询?同样的问题也被问到这里.但没有提供令人满意的答复。

我的另一个问题是,如果您使用QSqlQuery::prepare()准备了一个查询并调用了QSqlQuery::finish(),那么应该再次准备查询吗?我之所以这样问,是因为文档中没有提到准备好的查询,以防QSqlQuery::finish()出现。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-19 07:34:10

事务的要点是能够执行几个不同的查询,其中数据库更改只有在所有工作正常的情况下才能执行。

考虑以下代码结构(伪代码):

代码语言:javascript
复制
startTransaction()
try
{
    insertParentDataset(parent);
    insertChildDataset(child1);
    insertChildDataset(child2);
    commitTransaction();
}
catch
{
    rollbackTransaction()
}

这种结构的代码将确保每个查询只有在以前的查询工作时才能执行,如果出现任何错误,则将忽略try { }块中的方法所造成的每一项更改,即数据库仍将处于与以前相同的状态。

出于这些原因,我只在修改数据库时使用事务,而不是在读取它们时使用事务。

如果您准备或不准备查询,则决定是完全不同的。通常准备查询是为了提高海量数据插入的性能,或者防止用户执行SQL注入(可能有更多的原因),但这并不影响事务的行为。从事务的角度来看,执行“正常”查询或准备好的查询并不重要。

关于finish(),我从来没有用过。对于不同的查询,使用不同的QSqlQuery对象通常更方便。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18306548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档