将数据导入Sqlite3

时间:2012-02-27 12:40:15

标签: ios sqlite

我们正在为我们的iPad项目使用SQLite。我们正在从另一个SQLite导入数据。导入数据后,我们无法从viewcontroller将数据插回到Sqlite中。 当我们尝试在设备中访问相同内容时抛出错误,同时在Simulator中工作正常。

  

设备错误:     *断言失败 - [DataBaseSharedManager insertLoginDetails:],/ Users / vidya / Desktop / eDetail_feb27 / eDetail / Classs / Database files / DataBaseSharedManager.m:165   2月27日18:07:17未知eDetail [1866]: 由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'错误:无法使用消息保存优先级'数据库磁盘映像格式错误''   * *第一次抛出调用堆栈:       (0x33e758bf 0x352901e5 0x33e757b9 0x3289f3b3 0x336b15 0xae887 0x33dd422b 0x32fd8b 0x328fcc39 0x328546e9 0x328546b3 0x328545d5 0x375048a5 0x374f9545 0x374f9639 0x374f9243 0x374f9179 0x33e49b03 0x33e492cf 0x33e48075 0x33dcb4dd 0x33dcb3a5 0x306b6fcd 0x32393743 0xab125 0xab0bc)

注意:我们的SQlite文件是36MB。

参考代码:

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


    if (sqlite3_open([writableDBPath UTF8String], &database) == SQLITE_OK){

        NSString *sSqlSelect = [NSString stringWithFormat:@"Insert into LOGIN (LoginId, UserName, Password, LastSyncDate, SFId,SecurityToken, AccountType, SFUserId,Region,ModifiedDate) values (\"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\")", [pDict objectForKey:@"LoginId"],[pDict objectForKey:@"UserName"],[pDict objectForKey:@"Password"],[pDict objectForKey:@"LastSyncDate"],[pDict objectForKey:@"SFId"],[pDict objectForKey:@"SecurityToken"], [pDict objectForKey:@"AccountType"], [pDict objectForKey:@"SFUserId"],[pDict objectForKey:@"Region"],[pDict objectForKey:@"ModifiedDate"]]; 

        sqlite3_stmt *insertValue;
        int nResult = sqlite3_prepare_v2(database, [sSqlSelect UTF8String],-1,&insertValue,NULL);
        if(nResult == SQLITE_OK){
            sqlite3_step(insertValue);
        }else{
            NSAssert1(0,@"Error:failed to save priority with message '%s'",sqlite3_errmsg(database));
        }
        sqlite3_finalize(insertValue);
    }else{
        sqlite3_close(database);
        NSAssert1(0, @"Failed to open database with message '%s'.", sqlite3_errmsg(database));
    }

对于事务:我们从一个SQLite导出数据并将同一个表导入另一个SQLite。我们正在使用Firefox SQLite Manager。

1 个答案:

答案 0 :(得分:0)

我认为当你使用firefox导入数据库时​​,它已经被破坏了。

我认为你可以通过编写一个sqlite文件中的读取数据并将其存储到另一个sqlite文件来完成这项工作。你可以单独为它创建一个简短的代码,之后只需将sqlite文件复制并粘贴到主包中。 / p>