首页 文章

我可以使用相同的QSQLQuery变量来执行多个语句吗?

提问于
浏览
0

我可以使用相同的 QSQLQuery 变量在 Qt 5.3.2 中使用 SQLite 执行多个语句吗?我应该在每次执行后调用 finishclear 函数吗?

例如:

QSqlQuery query;

query.prepare("INSERT INTO myTable (id, name) VALUES (:id, :name)");
query.bindValue(":id", id);
query.bindValue(":name", name);

if( !query.exec() )
{
    qDebug() << "Error";
}

query.finish() // or query.clear()?

query.prepare("INSERT INTO myProducts (product, price) VALUES (:product, :price)");
query.bindValue(":product", product);
query.bindValue(":price", price);

if( !query.exec() )
{
    qDebug() << "Error";
}

query.finish() // or query.clear()?

Note :我想我需要使用 finish 函数,但我并不完全理解 clear 函数的作用 . 文件说:

清除结果集并释放查询所拥有的所有资源 . 将查询状态设置为非活动状态 .

1 回答

  • 2

    在你的情况下没有必要使用任何这些功能,你可以做得很好,没有你要问的两行


    我可以使用相同的QSQLQuery变量在Qt 5.3.2中使用SQLite执行多个语句吗?

    当然可以,但你没有义务这样做 . 例如,如果你想执行一个SQL查询,并且你已经有了一个有效的 QSqlQuery 对象(你不想从中获取更多的数据),你可以使用相同的 QSqlQuery 对象使用新查询,因为不需要创建另一个 QSqlQuery .

    我应该在每次执行后调用结束或清除功能吗?

    以下是文档对QSqlQuery::finish()所说的内容:

    指示数据库驱动程序在重新执行之前不会从此查询中获取更多数据 . 通常不需要调用此函数,但如果您打算稍后重新使用查询,则可能有助于释放锁或游标等资源 .

    这意味着,如果要保留长时间使用的 QSqlQuery 对象,则只需要使用它,以便使用它 . 但实际上没有必要这样做,只要让你的对象超出范围就完成它 .

    关于QSqlQuery::clear()

    清除结果集并释放查询所拥有的所有资源 . 将查询状态设置为非活动状态 . 你应该很少需要调用这个函数 .

    您可以查看Master Detail Example,尤其是createConnection() function,以查看多次使用相同的 QSqlQuery 对象 .

相关问题