Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将NSMutableDictionary插入SQLite数据库的1个单元格_Ios_Objective C_Sqlite_Nsdictionary_Nsmutabledictionary - Fatal编程技术网

Ios 将NSMutableDictionary插入SQLite数据库的1个单元格

Ios 将NSMutableDictionary插入SQLite数据库的1个单元格,ios,objective-c,sqlite,nsdictionary,nsmutabledictionary,Ios,Objective C,Sqlite,Nsdictionary,Nsmutabledictionary,我希望这里有人能帮我 我需要将NSMutableDictionary插入SQLite数据库的一个单元格中。我可以将字符串等插入数据库,但当我尝试插入字典时,会出现语法错误: **Can't run query 'BEGIN TRANSACTION; UPDATE Database SET Column1 = { Bad = ""; "End_Time" = 4; Good = ""; Moderate = ""; Note = ""; } WHERE Title = Name; COMMIT T

我希望这里有人能帮我

我需要将NSMutableDictionary插入SQLite数据库的一个单元格中。我可以将字符串等插入数据库,但当我尝试插入字典时,会出现语法错误:

**Can't run query 'BEGIN TRANSACTION; UPDATE Database SET Column1 = {
Bad = "";
"End_Time" = 4;
Good = "";
Moderate = "";
Note = "";
} WHERE Title = Name; COMMIT TRANSACTION;' error message: unrecognized token: "{"**
为此,我使用以下代码:

NSString *sql2 = [NSString stringWithFormat:@"UPDATE Database SET Column%@ = %@ WHERE Title = %@",previousQuestion,adictionary,Name];
有人能提供帮助或提出不同的方法吗,?我需要能够在1个单元格中存储键/值,因为还有79个单元格具有类似的数据,我需要引用数据库特定列中的每个特定键

我曾尝试将字典转换为字符串(然后在检索时将字符串转换回字典),但这会导致相同的问题。 有什么建议吗

非常感谢,,
Andrew

您不能只将Objective-C对象插入数据库。它必须是字符串、二进制数据或数字。在将其转换为字符串时,还需要清理输入(以便它不包含SQL将以另一种方式解释的任何无效字符)。例如,如果您试图插入一个包含一些SQL代码的字符串,您不会希望它尝试执行该代码。它看起来像是挂在一个
{
在字符串中。您可以将字典或字符串转换为NSData并将其作为二进制数据插入数据库。

您不能只将Objective-C对象插入数据库。它必须是字符串、二进制数据或数字。在将其转换为字符串时,还需要清理输入(这样它就不会包含任何SQL将以另一种方式解释的无效字符)。例如,如果您试图插入一个包含某个SQL代码的字符串,您就不会希望它尝试执行该代码。看起来它在这里挂起了
{
在字符串中。您可以将字典或字符串转换为NSData,并将其作为二进制数据插入数据库。

这是两种方法。 第一路:-

归档NSMutableDictionary将其转换为NSData并将其存储在Sqlite列中,该列的数据类型应为blob类型

 NSData *theDictionaryData = [NSKeyedArchiver archivedDataWithRootObject:yourDictionary]; 
在sqlite中绑定此数据

sqlite3_bind_blob(addStmt, 5, theDictionaryData, -1, SQLITE_TRANSIENT);
现在从sqlite检索时间

NSData *retrieveData = [[NSData alloc] initWithBytes:sqlite3_column_blob(selectstmt, 4) length:sqlite3_column_bytes(selectstmt, 4)];
最后将其转换为NSDictionary

 NSDictionary *dictionary = [NSKeyedUnarchiver unarchiveObjectWithData:retrieveData];
第二条道路:-
创建与NSDictionary键数相等的列数。从每个键中提取数据并将其保存到相应的表列中。

这是两种方法。 第一路:-

归档NSMutableDictionary将其转换为NSData并将其存储在Sqlite列中,该列的数据类型应为blob类型

 NSData *theDictionaryData = [NSKeyedArchiver archivedDataWithRootObject:yourDictionary]; 
在sqlite中绑定此数据

sqlite3_bind_blob(addStmt, 5, theDictionaryData, -1, SQLITE_TRANSIENT);
现在从sqlite检索时间

NSData *retrieveData = [[NSData alloc] initWithBytes:sqlite3_column_blob(selectstmt, 4) length:sqlite3_column_bytes(selectstmt, 4)];
最后将其转换为NSDictionary

 NSDictionary *dictionary = [NSKeyedUnarchiver unarchiveObjectWithData:retrieveData];
第二条道路:-
创建与NSDictionary的键数相等的列数。从每个键中提取数据并将其保存到相应的表列中。

不能将Objective-C对象插入SQLite数据库。只能插入数字、字符串和“BLOB”(二进制数据字符串)。通常,您要做的是将每个字典键/值映射到数据库中的相应列,但这需要做一些工作(如果您没有几个“固定”数据库包中的一个要使用)。(您可以做的另一件事是将字典转换为JSON并将JSON作为字符串插入,但这不允许DB用户访问字典中的单个值。)您不能将Objective-C对象插入SQLite数据库。您只能插入数字、字符串和“BLOB”(二进制数据字符串)。通常,您要做的是将每个字典键/值映射到数据库中的相应列,但这需要做一些工作(如果您没有几个“固定”数据库包中的一个要使用)。(您可以做的另一件事是将字典转换为JSON并将JSON作为字符串插入,但这不允许DB用户访问字典中的单个值。)如果使用“prepared”语句,“{”没有问题。如果使用“prepared”语句,“{”没有问题。