2011-08-13 3 views
0


DBにいくつかのクエリを挿入するためにFMDBを使用しようとしています。
挿入の問合せを確認すると、挿入されているというメッセージが表示されます。
後で実際にテーブルからデータを読み取ることができます。
しかし、DBから情報を読み込もうとすると、nullに戻ります。
XcodeプロジェクトでDBをチェックしても、更新されていないようです。
それは私を混乱させます。どのような問題が起こる可能性がありますか?FMDBがDBに挿入されていません

+1

あなたは 'db.traceExecution = YES'と' db.logsErrors'を使って何が起こっているのかチェックしますか? –

+0

db.traceExecutionとdb.logsErrorsの両方をチェックしました。エラーを表示せず、トランザクションを表示します。 – Mush

+0

DBから読み取るコードを投稿できますか? –

答えて

4

コードが間違っています。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:@"db.sqlite"]; 

FMDatabase *db = [FMDatabase databaseWithPath:dbPath]; 
[db open]; 

[db executeUpdate:@"INSERT INTO foo (bar) VALUES (?)", bar]; 

[db close]; 

、読み:これは私が書くために使用するものです

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:@"db.sqlite"]; 

    FMDatabase *db = [FMDatabase databaseWithPath:dbPath]; 
    [db open]; 

    NSMutableArray *bar = [[[NSMutableArray alloc] init] autorelease]; 

    FMResultSet *s = [db executeQuery:@"select * from foo"]; 
    while ([s next]) { 

     [bar addObject:[s stringForColumn:@"bar"]]; 

    } 

    NSLog(@"%@", bar); 

    [db close]; 

を私はデシベルを設置場所もチェックアウト。あなたのやり方は、シミュレータでは動作しますが、サンドボックスやすべてのためにデバイスでは動作しないと思います。

幸運を祈る!

EDIT:

- (void)createEditableCopyOfDatabaseIfNeeded { 


    // First, test for existence. 
    BOOL success; 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSError *error; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"db.sqlite"]; 
    success = [fileManager fileExistsAtPath:writableDBPath]; 
    if (success) return; 
    // The writable database does not exist, so copy the default to the appropriate location. 
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"db.sqlite"]; 
    success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error]; 
    if (!success) { 
     NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]); 
    } 
} 

としてapplication:didFinishLaunchingWithOptionsからそのメソッドを実行します:あなたが最初にあなたのprojecttreeでデータベースを置くことを確認してください

[self performSelector:@selector(createEditableCopyOfDatabaseIfNeeded) withObject:nil]; 

アプリのデリゲートで

入れ、これを。

+0

ありがとう、私はこれを撃つだろう。 – Mush

+0

K私はそれが行った方法を教えてください:) –

+0

今、それは与えているエラーです。そのようなテーブルはありません。 – Mush

関連する問題