2012-04-04 31 views
0

我必須從compiledStatement中找到一個表名(由sqlite3庫的sqlite3_prepare_v2方法返回)。在Xcode中找到表名,Objective-C和Sqlite3

我不能使用方法const char *sqlite3_column_table_name(sqlite3_stmt*,int);,因爲此方法需要將dylib與選項[SQLITE_ENABLE_COLUMN_METADATA]合併。

我想知道如何使用該選項重新編譯dylib(在哪裏可以找到要編譯的代碼以及如何執行該操作,使用哪個命令和標記?)或者是否存在其他方法來優化表名。

回答

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 

但我更喜歡使用正則表達式。

+0

感謝您的回答。 但我會避免在查詢中搜索名稱,因爲我想使代碼更通用,可重用。 無論如何,謝謝。 – 2012-04-06 17:45:59

+0

@Curlyman。如果你找到答案,請發貼,有幫助!謝謝。 – Vignesh 2012-04-06 22:15:39