2014-05-07 49 views
1

當我的iOS應用程序在與SQLite數據庫接口時依賴於特定的雜注語句的功能是否安全?依賴於SQLite雜注語句安全嗎

按照SQLite documentation

具體的註記語句可以被移除和其他的SQLite的未來版本中加入。不保證向後兼容性。

然而,根據this upvoted SO answer

可以使用雜注來獲得索引列:

PRAGMA index_info(索引名);

而這一次拿到的列名的表:

PRAGMA table_info(表名);

我的具體使用情況是,我想我的iPhone應用程序,以檢查是否特定列通過FMDB SQLite的包裝進行查詢之前存在。恐怕使用PRAGMA table_info(table-name)可能會在假定的未來iOS版本中產生意想不到的結果,其中包括SQLite的新版本,其中維護人員決定放棄對此編譯指示語句的支持。

+0

另一種辦法是設法準備一個查詢只是一個表中的一個列的聲明。如果準備聲明失敗,則知道列不在那裏。也許在應用程序啓動時檢查一次。 – rmaddy

+0

感謝您的輸入。這就是我現在要做的事情(即'SELECT column-name FROM table-name LIMIT 1'並檢查錯誤)。 – tboyce12

回答

1

我會更傾向於使用:

FMResultSet* results = [database executeQuery:@"SELECT * FROM tableName LIMIT 0"]; 
if([[results columnNameToIndexMap] containsObject:@"testColumn"]) 
+0

我現在看到的幾乎是你準備在做準備時做的事情。 –

+0

是非常相似。很好,不知道'LIMIT 0'會起作用。也不知道「-columnNameToIndexMap」。謝謝。 – tboyce12

+0

我不確定是否會,所以我試了一下:) –