【问题标题】:Placing a SQLite database into a JSON object to send to a server from iOS将 SQLite 数据库放入 JSON 对象以从 iOS 发送到服务器
【发布时间】:2013-11-30 01:21:31
【问题描述】:

我正在尝试在 iOS 设备上获取我的整个本地 sqlite 数据库,并使用 http post 将其发送到我的服务器以将其插入 MySQL 数据库。我正在为我的数据库使用 FMDB,并且我有 5 个表要插入到一个对象中。我能够使用 php 对我的远程服务器执行此操作,但不确定如何在 xcode 中执行此操作。这是我发送对象的代码,但我不知道如何打包我从另一个答案中窃取的 json 对象 (How do I send the data I have in my sqlite database to the server with HTTP and JSON)

NSMutableURLRequest *request;
request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:[NSString stringWithFormat:@"%d", [requestdata length]] forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:requestdata];

//this kicks off the request asynchronously
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

【问题讨论】:

  • 您是否考虑过将等效的 SQL 作为文本发送?只要你从不在服务器上执行它,它就是安全的。您可能会发现它更小,而且肯定更容易理解。
  • 不,我没有考虑过。我从未在 iOS 或服务器端工作过。我该怎么做呢?而这在这方面取得了什么成就?我需要在我的客户端应用程序中获取数据并将行插入到远程不包含的远程服务器中,所以我要做一个循环来检查它
  • 哦。如果是这种情况,您甚至不需要整个转储。只需将您感兴趣的表的内容导出为 JSON 对象:字典数组。一旦您将数据放入字典数组中,iOS 的 JSON 编码器应该能够处理这个问题。你是如何访问 SQLite 的?您是否使用已经将记录转换为字典的包装器?
  • 我使用 FMDB 作为包装器,我得研究一下

标签: php mysql ios json sqlite


【解决方案1】:

我不建议使用 JSON 传输大型 BLOB 数据,但如果您绝对必须:

这里,二进制数据必须通过 JSON 字符串发送。要从二进制文件中获取“字符串”,您需要对最终生成“字符串”的二进制数据进行编码。例如,使用base64 编码。此编码会将您的二进制数据转换为 ASCII 字符串。

这个字符串可以用于 JSON 字符串:

JSON:

{
    "sqlite_database": "aJ6Fnh1nfh37sg20zBAskfh0QRb ..."
}

NSData 具有编码二进制数据的方法:base64EncodedDataWithOptions:base64EncodedStringWithOptions:

然后您应该能够使用内容类型为 application/json 的 POST 请求发送此 JSON(不要使用“application/x-www-form-urlencoded”)。

【讨论】:

  • 我不太清楚你对那个代码 sn-p 的意思。 : 右边是什么
  • 这只是 JSON,一个 JSON 对象,带有一个键“sqlite_database”及其值,一个 base64 编码的二进制数据,作为 JSON 字符串 .从我的回答中给出的信息中,应该可以直接推断出相应的代码。您可以创建一个 JSON representation,即具有该键和值的 NSDictionary,然后使用 NSJSONSerialization 在 NSData 对象中获取序列化 JSON。该数据对象成为 POST 请求的主体。
猜你喜欢
  • 2017-07-12
  • 1970-01-01
  • 2012-05-03
  • 2023-03-15
  • 2016-12-15
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
  • 2018-01-14
相关资源
最近更新 更多