0

我必须从已编译的语句中找到一个表名(由sqlite3_prepare_v2sqlite3 库的方法返回)。

我不能使用该方法const char *sqlite3_column_table_name(sqlite3_stmt*,int);,因为此方法需要使用 option 编译的 dylib [SQLITE_ENABLE_COLUMN_METADATA]

我想知道如何使用该选项重新编译 dylib(我可以在哪里找到要编译的代码以及如何使用哪个命令和标志来编译?),或者是否存在另一种方法来细化表名。

4

1 回答 1

0

如果您知道您的语句可能构建的查询类型,您可以使用此方法,

/*
** CAPI3REF: Retrieving Statement SQL
**
** ^This interface can be used to retrieve a saved copy of the original
** SQL text used to create a [prepared statement] if that statement was
** compiled using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()].
*/
SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt);

检索用于构建语句的查询。获得查询后,您可以解析查询以获取表名。

例如,如果您的语句是插入,您会得到

INSERT INTO TABLE_NAME...

现在第三个词是你的表名。您可以使用 ,

componentSeperatedByString

但我更喜欢使用正则表达式。

于 2012-04-04T16:18:40.700 回答