2011-07-21 121 views
1

我找不到我的SQLite數據庫。我正在使用4.1模擬器。iPhone:我的Sqlite數據庫在哪裏?

所有的教程都說它在/Users/<USERNAME>/Library/Application Support/iPhone Simulator/4.1/Applications/<APP>/Documents。那裏什麼都沒有。如何通過代碼創建一個新的?所以我在這裏看到一個.sqlite文件?

在我的代碼我這樣做:

int result = sqlite3_open("/MyApp.db", &database); 

if(result != SQLITE_OK) 
{ 
sqlite3_close(database); 
NSLog(@"Failed to open DB"); 
return; 
} 

else { 
NSLog(@"Opened DB"); 
} 

我然後繼續創建一個表,並從中查詢,他們都成功。

但是,我找不到它將數據放在其上的sqlite文件。

它可能在哪裏?

回答

1

下面有2個功能

  1. 第一個複製你的數據庫,如果它安裝在烏拉圭回合期間,仿真器是不是在你的應用程序。

2.第二個函數獲取數據庫的路徑。

這兩個函數必須在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions委託函數調用yourAppdelegate.m 讓你的數據庫將其複製到仿真器中的應用程序文件夾,如果它不存在那裏。

不要忘了在yourAppdelegate.h

- (void) copyDatabaseIfNeeded { 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    NSError *error; 

    NSString *dbPath = [PropertyUploaderAppDelegate getDBPath]; 

    BOOL success = [fileManager fileExistsAtPath:dbPath]; 

    if(!success) 

    { 

NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] 

stringByAppendingPathComponent:@"YOURDATABASENAME.sqlite"]; 

success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error]; 

     if (!success) 

      NSAssert1(0, @"Failed to create database file with message '%@'.", [error localizedDescription]); 

    } 

} 


+(NSString *) getDBPath { 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); 

    NSString *documentsDir = [paths objectAtIndex:0]; 

    return [documentsDir stringByAppendingPathComponent:@"YOURDATABASENAME.sqlite"]; 

} 

添加

NSString *databasePath; 
sqlite3 *contactDB; 

這些過程後 檢查它在/Library/Application Support/iPhone Simulator/4.1/Applications/<yourAppfolder>/Documents

+0

看起來可能是一個很好的答案,但需要編輯。我幾乎是自己做的,但是我無法弄清楚你打算做什麼,並且無論如何我沒有編輯權限,所以它將首先進行審查。 – iandotkelly

+0

我試過這個,但沒有放入應用程序委託,但直接在我連接到數據庫的代碼之前......它給了我「無法使用消息創建操作無法完成,沒有這樣的文件或目錄」。所以DB文件甚至不存在於默認路徑中? –

+0

Hisoka,你需要使用firefox addon(sqlite)創建一個數據庫,然後你需要在你的應用中複製該數據庫並添加到你的應用的資源文件夾中。然後在該代碼中指定您的db名稱。我希望您在您使用的文件中導入。 –

0

如果你想在應用程序的保存目錄,然後執行此操作,

NSString *dirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                 NSUserDomainMask, 
                 YES) objectAtIndex:0]; 
NSString *dbFile = [dirPath stringByAppendingPathComponent:@"sqlite.db"]; 

如果你打開一個文件/MyApp.db,那麼它會在你的Mac的根源。在Finder中打開Macintosh HD,看它是否在那裏。

+0

大..現在該文件正被複制到這個文件夾。但現在我創建了表格,插入了一些數據,都成功了(因爲我在末尾做了一個選擇,並且看到了它),但是它並沒有被保存到這個數據庫文件中!該文件是0 KB ....任何想法爲什麼?我正在完成我準備好的陳述,甚至做了一個安全承諾。然而,沒有數據! –

+0

SQLite3緩衝區寫入。數據最終應該到達磁盤。 –