我注意到QSqlDatabase文档说
“注释:在使用事务时,必须在创建查询.之前启动事务。”
这是否限制了QSqlQuery::prepare()在事务情况下的有用性,如果您必须在启动事务之后才创建查询?同样的问题也被问到这里.但没有提供令人满意的答复。
我的另一个问题是,如果您使用QSqlQuery::prepare()准备了一个查询并调用了QSqlQuery::finish(),那么应该再次准备查询吗?我之所以这样问,是因为文档中没有提到准备好的查询,以防QSqlQuery::finish()出现。
发布于 2013-08-19 07:34:10
事务的要点是能够执行几个不同的查询,其中数据库更改只有在所有工作正常的情况下才能执行。
考虑以下代码结构(伪代码):
startTransaction()
try
{
insertParentDataset(parent);
insertChildDataset(child1);
insertChildDataset(child2);
commitTransaction();
}
catch
{
rollbackTransaction()
}这种结构的代码将确保每个查询只有在以前的查询工作时才能执行,如果出现任何错误,则将忽略try { }块中的方法所造成的每一项更改,即数据库仍将处于与以前相同的状态。
出于这些原因,我只在修改数据库时使用事务,而不是在读取它们时使用事务。
如果您准备或不准备查询,则决定是完全不同的。通常准备查询是为了提高海量数据插入的性能,或者防止用户执行SQL注入(可能有更多的原因),但这并不影响事务的行为。从事务的角度来看,执行“正常”查询或准备好的查询并不重要。
关于finish(),我从来没有用过。对于不同的查询,使用不同的QSqlQuery对象通常更方便。
https://stackoverflow.com/questions/18306548
复制相似问题