我正在寻找一种禁止对QSqlQuery对象进行非SELECT查询的方法。

我知道QSqlQuery::isSelect仅在QSqlQuery::exec之后有效(损坏
已经在这里完成)。

因此,有什么方法可以执行此操作,或者我必须明确验证query string

谢谢。

最佳答案

根据我的经验,即使在运行QSqlQuery::isSelect命令之前,QSqlQuery::exec函数也可以正常工作。但仅当使用查询初始化对象时。即:

QSqlQuery query("SELECT * FROM someTable");
qDebug() << query.isSelect(); //Outputs True

要么
QString queryString = "SELECT * FROM someTable";
QSqlQuery query(queryString);
qDebug() << query.isSelect(); //Outputs True

如果您正在使用prepare函数并将查询字符串传递给它,那么您将必须自己验证查询字符串。即;
QSqlQuery query;
query.prepare("SELECT * FROM someTable");
qDebug() << query.isSelect(); //Outputs False

如果确实要避免手动验证查询字符串,则必须避免使用QSqlQuery::prepareQSqlQuery::bindValue函数,而是自己创建查询并使用您创建的QSqlQuery初始化QString对象。

10-06 14:38