根据QT(C++)中SQLite数据库中的正则表达式检索记录

Retrieve records according to a regex from a SQLite db in QT (C++)

本文关键字:正则表达式 检索 记录 数据库 SQLite C++ 根据 QT      更新时间:2023-10-16

我正在尝试使用QT/C++中的QSqlDatabaseQSqlQuerySQLite数据库中检索记录。我的查询看起来像:

select * from tableName where columnName REGEXP 'regex'

一些消息来源说要创建一个名为REGEXP的函数,但我找不到任何与QT/C++有关的线索。

有人能帮我吗?

从Qt版本5.10开始,REGEXP可以与SQLite一起使用,而无需自己实现。但是,它在默认情况下是禁用的。要启用它,请在连接选项中设置标志QSQLITE_enable_REGEXP。

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setConnectOptions("QSQLITE_ENABLE_REGEXP");

请参阅文档

如上所述,您需要提供一些将正则表达式能力导出到SQL的本机C/C++代码。您可以通过调用函数sqlite3_create_function_v2来实现这一点,该函数是用C.编写的SQL库的一部分

由于QSqlDatabase是一个通用的SQL包装器,旨在支持大量的SQL引擎,因此所提供的函数是所有函数中最低的公分母。因此,您无法从Qt访问sqlite3_create_function_v2

如果您需要在Qt应用程序中使用REGEXP,则需要在整个项目中使用纯C sqlite库。围绕SQLite的C++包装器是可取的,但根据我自己的经验,没有什么能很好地工作,这就是为什么我们正在开发自己的包装器。挖掘SQLite可能会很痛苦,尤其是当您开始组合不同的C++构建系统时。所以,如果你真的真的需要REGEXP,请注意并问问自己。