Lazar_lv 2015-01-26 02:35 采纳率: 0%
浏览 697

iOS 沙盒中copy的问题

我有一个.db的数据库 我copy到沙盒中之后用BOOL 判断copy成功 但是内容全不见了 ?
0KB???
NSFileManager *fieldManager=[NSFileManager defaultManager];

    NSString *nfieldPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES)[0]stringByAppendingPathComponent:@"number_location.db"];

    NSString *yfieldPath=[[NSBundle mainBundle] pathForResource:@"number_location" ofType:@"db"];

    if(![fieldManager fileExistsAtPath:nfieldPath])
    {
        BOOL isCopy=[fieldManager copyItemAtPath:yfieldPath toPath:nfieldPath error:nil];
        if(isCopy)
        {
            NSLog(@"复制成功");

        }
    }
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-03 07:31
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    你使用了copyItemAtPath:toPath:error:方法来尝试拷贝文件。这个方法只用于在文件系统上拷贝文件。

    如果你想要从SQLite数据库中读取数据并将其复制到一个新的数据库,你需要首先打开数据库,然后从数据库中读取数据,最后将这些数据写入新的数据库。你可以使用SQLite的API来实现这一点。

    以下是一个简单的示例:

    - (void)copyDatabase:(NSString *)sourcePath toNewPath:(NSString *)newPath {
        // 打开数据库
        sqlite3 *database = [sqlite3 openDatabaseWithLocation:@"/tmp/test.db", nil];
    
        // 创建新数据库
        sqlite3 *newDatabase = [sqlite3 databaseCreate];
    
        // 读取源数据库中的所有表和列
        NSArray *tables = [self getTablesFromDB:database sourcePath:sourcePath];
        
        // 将数据写入新数据库
        for (NSString *table in tables) {
            NSString *query = @"SELECT * FROM %@", table;
            NSMutableArray *rows = [self executeQuery:database query:query];
            
            // 将每一行数据写入新数据库
            for (NSDictionary *row in rows) {
                sqlite3_stmt *stmt = [sqlite3_prepare_v2 newDatabase, row.keys, -1, &status, NULL];
                while ([sqlite3_step(stmt)] == SQLITE_ROW) {
                    [row values setObject:[sqlite3_column_text(stmt, 0)] forKey:[sqlite3_column_name(stmt, 0)]];
                }
                
                sqlite3_finalize(stmt);
            }
    
            // 关闭数据库连接
            [sqlite3_close:database];
            [database release];
        }
    }
    
    // 获取数据库的所有表
    NSArray *getTablesFromDB: (sqlite3 *)database sourcePath: (NSString*)sourcePath {
        NSMutableArray *tables = [[NSMutableArray alloc] init];
        sqlite3_stmt *stmt;
    
        sqlite3_prepare_v2(database, @"SELECT name FROM sqlite_master WHERE type='table'", -1, &stmt, NULL);
    
        while ([sqlite3_step(stmt)] == SQLITE_ROW) {
            NSString *tableName = [NSString stringWithUTF8String:[sqlite3_column_text(stmt, 0)]];
            [tables addObject:tableName];
        }
    
        sqlite3_finalize(stmt);
        return tables;
    }
    

    注意:这只是一个基本的例子,你可能需要根据你的具体需求进行调整。

    评论

报告相同问题?