0

iOS の sqlite3 データベースにテキスト データを挿入しようとしています。

データをsqlite3データベースに保存するために次のコードを書きました。

NSFileManager *fileMgr = [NSFileManager defaultManager];
        NSString *dbPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"MgDB.sqlite"];

        BOOL success = [fileMgr fileExistsAtPath:dbPath];

        if(!success)
        {
            NSLog(@"File Not Found");
        }

        if((!sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK))
        {
            NSLog(@"Error in MyInfo");
        }

        const char *sql = "Insert into MyDB (name,address,email) values('%@','%@','%@')";

        sqlite3_bind_text(sqlStmt, 0, [Name UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(sqlStmt, 1, [Address UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(sqlStmt, 2, [Email UTF8String], -1, SQLITE_TRANSIENT);

        if(sqlite3_prepare(database, sql, -1, &sqlStmt, NULL))
        {
            NSLog(@"Error in Loading database");
        }

        if (sqlite3_exec(database, sql, NULL, NULL, NULL) == SQLITE_OK) 
        {
            return sqlite3_last_insert_rowid(database);
        }


        if(sqlite3_step(sqlStmt) == SQLITE_ROW)
        {
            NSLog(@"ERROR");
        }
    }

    @catch (NSException *exception) 
    {
        NSLog(@"%@",exception);
    }

    @finally 
    {
        sqlite3_finalize(sqlStmt);
        sqlite3_close(database);
    }

上記のコードによると、最後の挿入 ROWID を返して、挿入されたかどうかを確認します。

ビューにテキスト データを保存した後、ROWID が増加しました。

ただし、FireFox sqlite3 ツールでデータベースをチェックすると、挿入したデータはありません。

そのため、実行を停止してアプリを再実行し、データを再度追加します。

最後の挿入 ROWID は古いカウントと同じです。1 つも増加しません。

sqlite データベースにデータを保存しない理由を知りたいです。

私のコードに問題はありますか?

私を助けてください。

前もって感謝します。

4

1 に答える 1

1
NSString *dbPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"MgDB.sqlite"];

アプリケーション バンドルに含まれるファイルに書き込むことはできません。代わりに、Documents ディレクトリにデータベースを作成 (またはコピー) してください。

QA1662を参照してください。

于 2012-07-05T13:21:06.513 に答える