0

sqlite3_prepare_v2コンパイル済みステートメント ( sqlite3 ライブラリのメソッドによって返される) からテーブル名を見つける必要があります。

const char *sqlite3_column_table_name(sqlite3_stmt*,int);このメソッドは、オプションでコンパイルされた 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...

3 番目の単語はテーブル名です。を使用できます。

componentSeperatedByString

しかし、正規表現を使用することをお勧めします。

于 2012-04-04T16:18:40.700 に答える