2016-08-01 40 views
0

SQLite Manager創建一個表,並將其導出到桌面,它的名字是db_fo_dic.sqlite,我可以打開db_fo_dic.sqlite使用SQLite Manager,所以我的db_fo_dic.sqlite複製到我的Xcode項目目錄我試圖通過FMDB打開sqlite的文件,但它失敗:SQLite的文件,使用FMDB打開失敗

NSString *path = [[NSBundle mainBundle] pathForResource:@"db_fo_dic" ofType:@"sqlite"];

FMDatabase *db = [FMDatabase databaseWithPath:path];

結果的信息是: 2016-08-01 19:22:34.955 test_sqlite[15380:425242] The FMDatabase <FMDatabase: 0x7ff589c38f10> is not open.

這是我的SQLite的位置路徑: /Users/youpude/Library/Developer/CoreSimulator/Devices/87D0245A-47F7-4741-81B2-209625CB3C5E/data/Containers/Bundle/Application/47B3AD1F-C08E-4E34-8858-494A95FB9EA5/test_sqlite.app/db_fo_dic.sqlite

回答

1

8小時過去了,我終於找到了解決問題的方法。

#import "FMDatabaseQueue.h" 

static FMDatabaseQueue *_queue; 

- (void)viewDidLoad

_queue = [FMDatabaseQueue databaseQueueWithPath:path];

,我可以查詢我的數據庫:

[_queue inDatabase:^(FMDatabase *db) { 

     FMResultSet *result = [db executeQuery:@"select * from dic_content limit 10;"]; 

     while ([result next]) { 

      NSString *str = [result stringForColumn:@"tit"]; 

      NSLog(@"%@",str); 
     } 

    }]; 

我用這個方法來取代以前的方法。

0

您不必爲存儲在應用程序包的內容寫入權限。所以你必須先將數據庫複製到文檔目錄。有關iOS中文件系統權限的更多詳細信息,請參閱Apple documentation for file system

所以,你可以這樣做,

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    self.documentsDirectory = [paths objectAtIndex:0]; 

    self.databaseFilename = dbFilename; 

NSString* destinationPath = [self.documentsDirectory stringByAppendingPathComponent:self.databaseFilename]; 
if (![[NSFileManager defaultManager]fileExistsAtPath:destinationPath]) { 
    NSString *sourcePath = [[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:self.databaseFilename]; 
    NSError *error; 
    [[NSFileManager defaultManager]copyItemAtPath:sourcePath toPath:destinationPath error:&error]; 

    if (error != nil) { 

     NSLog(@"%@",[error localizedDescription]); 
    } 

} 

這裏dbFilename是你的數據庫的名字(你的情況:db_fo_dic.sqlite)。

這樣做後,嘗試從目標路徑打開數據庫,它會工作,我想!

+0

我測試之前你的答案複製我的sqlite沙箱,它沒有爲我工作。 – aircraft

+0

而我只需要閱讀我的sqlite,但不能更新。 – aircraft

+0

嘗試獲取路徑,如'NSString * path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@「db_fo_dic.sqlite」];'然後嘗試 – Lion