2012-04-19 70 views
1

我想下載必須在應用程序中使用的數據庫(SQLite)。在保存下載的數據(它是NSData)之前,我想檢查下載的數據是否是SQLite數據庫。我如何檢查。SQLite數據庫下載

例如:

數據庫的正確URLl是http://example.com/mydatabase.db

如果莫名其妙網址的類型是http://example.com/mydatabase.bdx,它不存在,我還是收到NSData的一些數據。

NSData *dbfile = [NSData dataWithContentsOfURL:[NSURL URLWithString: @"http://example.com/mydatabase.db"]]; 

我當然可以檢查保存文件後試圖打開,如果它打不開它有一些問題。但是我想檢查NSData,而不需要保存文件,如果沒有正確的數據下載。

如何在不保存的情況下進行檢查?

+1

使用isEqualToString比較url-strings – 2012-04-19 10:45:43

+0

它不僅僅是正確或不正確的url。因爲如果有一天數據庫名稱改變了,那麼你仍然在NSData中收到一些東西。我想驗證正確的文件下載'mydatabase.db'或NSData的內容,如果它是一個SQLite數據庫。 – Anand 2012-04-19 11:14:32

+0

請參閱..以檢查它是否正確的文件名?應該有一些比較的基礎。 eg.do你想檢查文件的擴展名(.db->正確或.bdx->不正確)?如果你能告訴我你是憑什麼決定文件是否正確;那麼我可以幫你一下..! – 2012-04-19 11:18:45

回答

1

來看,所有我能找到的是sqlite3_open()和朋友,這些都需要一個文件名,而不是數據塊。

因此,短期出貨自己的自定義的sqlite3庫的,我想你將不得不保存下載NSData你描述 - 它轉儲到一個臨時位置,然後嘗試用sqlite3_open()打開它(也許,但希望你使用的是FMDB或類似的),如果失敗,則認爲數據無效。

+0

是的,我要(保存NSData,然後打開文件),如果失敗,這意味着正確的文件沒有下載。 – Anand 2012-04-19 12:29:24

1

下面的代碼將幫助你檢查擴展名。通過the sqlite3 interface documentation

NSString *url = @"http://example.com/mydatabase.bdx"; 
if([url hasSuffix:@".db"]) 
NSData *dbfile = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];