1

サポートファイルフォルダーにdbをインポートして、次を使用してdbに接続しようとしました:

NSString *sqliteDb = [[NSBundle mainBundle] pathForResource:@”person” ofType:@”sqlite”];
if(sqlite3_open([sqliteDb UTF8String], & database)!=SQLITE_OK)

挿入されたコードから値を挿入しようとしましたが、プログラムを終了してデータベースを確認すると、値が存在しません。ここで何が問題なのかわかりません。

4

3 に答える 3

1

バンドル内のファイルは読み取り専用です。編集することはできません。操作を実行するには、そのデータベースをアプリのキャッシュ、ドキュメント、または一時ディレクトリにコピーする必要があります。

于 2012-10-01T12:32:38.273 に答える
1

Ok。次に、そのデータベースを、アプリケーションのデータ ストレージとなるローカルの場所にコピーします。以下のコードは同じことを行います。

    NSArray *docPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    NSString *docDir = [docPaths objectAtIndex:0];
    NSString *dbPath = [[docDir stringByAppendingPathComponent:@"person.rsd"] retain];    
    NSFileManager *fm = [NSFileManager defaultManager];
    BOOL success = [fm fileExistsAtPath:dbPath];
    if(success) return;
    NSString *dbPathFromApp=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent :@"person.rsd"];
    [fm copyItemAtPath:dbPathFromApp toPath:dbPath error:nil];

その後、クエリを実行すると、アプリケーション シミュレーター フォルダーにデータが挿入されます。

于 2011-08-31T08:42:03.027 に答える
0

最初に person.sqlite db をアプリケーションのドキュメント ディレクトリにコピーし、その db を開いて操作します。

于 2011-08-31T09:01:39.657 に答える