QSqlQuery禁止非SELECT查询

QSqlQuery forbid non-SELECT query

本文关键字:查询 SELECT 禁止 QSqlQuery      更新时间:2023-10-16

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

我知道QSqlQuery::isSelect只有在QSqlQuery::exec(伤害已经在这里完成)。

那么,有什么方法可以做到这一点吗?或者我必须明确地验证query string

谢谢。

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

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函数,而是自己创建查询,并使用创建的QString初始化QSqlQuery对象。